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