Python中全局的替代品

Yar*_*riv 6 python global

我目前有这样的代码:

cache = 1
def foo():
    global cache
    # many
    # lines
    # of code
    cache = 2
Run Code Online (Sandbox Code Playgroud)

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

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

Yar*_*riv 15

class Cache:
     myvar = 1

def foo():
    Cache.myvar = 2
Run Code Online (Sandbox Code Playgroud)

这样,Cache.myvar实际上是"全球性的".可以从任何地方读取/写入它.

我更喜欢这个替代字典,因为它允许自动完成变量名称.


eum*_*iro 8

cache = 1
def foo():
    return 2
cache = foo()
Run Code Online (Sandbox Code Playgroud)

要么

d = {'cache': 1}
def foo(x):
    x['cache'] = 2
foo(d)
Run Code Online (Sandbox Code Playgroud)