我目前有这样的代码:
cache = 1
def foo():
global cache
# many
# lines
# of code
cache = 2
但是,这可能会导致将来出现难以发现的错误,因为读者可能不会注意到global cache
上面某处出现的错误cache = 2
。或者,贡献者可能会错误地添加def bar(): cache = 2
并忘记添加global cache
.
我怎样才能避免这个陷阱?
class Cache:
myvar = 1
def foo():
Cache.myvar = 2
这种方式,Cache.myvar
实际上是一个“全局”。可以从任何地方读/写它。
我更喜欢它而不是字典替代品,因为它允许自动完成变量名。
cache = 1
def foo():
return 2
cache = foo()
或者
d = {'cache': 1}
def foo(x):
x['cache'] = 2
foo(d)
“读者可能无意中认为全局变量已更新”并不是一个陷阱。您必须期望阅读您的代码的人知道 Python 是如何工作的。如果您想让它更加清晰,请使用评论。这就是他们的目的。
使用全局变量不是一个好的编程习惯。将变量作为参数传递:make 函数返回一些东西并在另一个函数中使用它。函数可以赋值给变量,这就是 Python 的工作方式。