是否存在与列表常量或任何其他可变对象相关的任何类型的“陷阱”?
Currently my context has to do with constants that will be passed to a call, but I ask the question generically as I don't feel that topic impacts the question meaningfully.
考虑这个示例代码:
#!/usr/bin/env python
# This file was not tested before posting.
import subprocess
LS_FLAGS = ['-l', '-a']
def main():
subprocess.call(['ls'] + LS_FLAGS)
if __name__ == '__main__':
main()
我问这个是因为我非常清楚mutable objects in function definitions引起的问题。 ;而且,即使据我了解,也不应该对受尊重的常量进行赋值或突变;而且“常量”并不是真正的东西:我问,并进一步问,是否可能存在一些语义上保护自己的约定,而不是意外突变?
最佳答案
不必担心突变可以使代码更容易推理,因此,它是纯函数式编程的核心原则之一。
在这种特定情况下,这似乎不是一个严重的问题,甚至可能被认为是一个功能。如果您认为没有理由修改 LS_FLAGS
,您始终可以将其定义为元组,但代码的用户可以随时完全重新声明 LS_FLAGS
(如果他们愿意)。
关于python - 可变常量安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640142/