7

我目前有这样的代码:

cache = 1
def foo():
    global cache
    # many
    # lines
    # of code
    cache = 2

但是,这可能会导致将来出现难以发现的错误,因为读者可能不会注意到global cache上面某处出现的错误cache = 2。或者,贡献者可能会错误地添加def bar(): cache = 2并忘记添加global cache.

我怎样才能避免这个陷阱?

4

4 回答 4

17
class Cache:
     myvar = 1

def foo():
    Cache.myvar = 2

这种方式,Cache.myvar实际上是一个“全局”。可以从任何地方读/写它。

我更喜欢它而不是字典替代品,因为它允许自动完成变量名。

于 2013-01-03T08:45:12.130 回答
8
cache = 1
def foo():
    return 2
cache = foo()

或者

d = {'cache': 1}
def foo(x):
    x['cache'] = 2
foo(d)
于 2013-01-03T08:31:34.200 回答
3

“读者可能无意中认为全局变量已更新”并不是一个陷阱。您必须期望阅读您的代码的人知道 Python 是如何工作的。如果您想让它更加清晰,请使用评论。这就是他们的目的。

于 2013-01-03T08:33:43.973 回答
2

使用全局变量不是一个好的编程习惯。将变量作为参数传递:make 函数返回一些东西并在另一个函数中使用它。函数可以赋值给变量,这就是 Python 的工作方式。

于 2013-01-03T08:50:52.743 回答