在python中替代global

An alternative to global in Python

我现在有这样的代码:

1
2
3
4
5
6
7
cache = 1
def foo():
    global cache
    # many
    # lines
    # of code
    cache = 2

但是,这可能会导致将来很难找到错误,因为读者可能不会注意到global cache出现在cache = 2的上方。或者,贡献者可能会错误地添加def bar(): cache = 2,而忘记添加global cache

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


1
2
3
4
5
class Cache:
     myvar = 1

def foo():
    Cache.myvar = 2

是这样的,Cache.myvarpractically"全球"。这是一个读/写它可能来自任何地方。

我选择这个,因为它在字典是另类的,让自我完成的变量名称。


1
2
3
4
cache = 1
def foo():
    return 2
cache = foo()

1
2
3
4
d = {'cache': 1}
def foo(x):
    x['cache'] = 2
foo(d)


"读者可能认为全球变unintentionally已更新"是不是多pitfall)。你有你的人期望的是对Python代码知道如何阅读的作品。如果你想使它额外的清除,使用注释。这就是他们再去。


使用全局变量是不好的编程实践。在一个可变参数的传递函数:返回的东西,它使一个函数中使用。功能可以被分配到的变量是Python的知识工程。