我正在努力遵守 Python 中的约定和最佳实践,例如使用 UPPER_SNAKE_CASE 表示常量。但是,我不确定值可变的常量赋值是否在该语言中被规范地视为常量。
我正在考虑JavaScript,你可以去哪里
const someVar = someObject;
并且你可以自由地修改someObject
,事实上,someVar
将始终指向其当前形式。它是一个常量引用,如果它指向一个复杂的数据类型,那么它的内容允许不是常量。
具体来说,我有一个全局变量,它始终是遵循特定模式的字典列表,但列表的长度和其中字典的值可能会改变。应该是
SOME_LIST
还是some_list
?
问问自己,常量的意义是什么以及它如何适合您的情况?我个人对常量的期望(这里我们进入意见区域)是,您始终可以从多个线程使用它而无需同步,并且其内容永远不会改变。如果你只保证它总是引用同一个对象,但该对象可能会改变,那么这不符合我的期望。
如果这应该是可变的,那么它听起来就像某种单例。 IE。变量始终引用同一个对象,但该对象具有可变状态。单例(以及一般的全局可变状态)是一种反模式,因为它们有各种缺点。
如果这应该始终保持不变,请考虑例如a
namedtuple
左右,这可以提供更好的保证,甚至可以防止意外修改。