Python中全局的替代品

时间:2013-01-03 08:30:03

标签: python global

我目前有这样的代码:

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

但是,这可能导致将来难以找到错误,因为读者可能没有注意到global cache出现在cache = 2之上的某处。或者,参与者可能会错误地添加def bar(): cache = 2而忘记添加global cache

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

4 个答案:

答案 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的工作方式。