使用 python class 包装共享变量与使用全局/非本地变量?

Using python class to wrap shared variables vs. using global / nonlocal?

我发现创建一个空 class 来包装我希望在不同函数之间共享的变量很有用:

# using a class as a namespace wrapper for containing and sharing variables
class shared_variables:
    pass

shared = shared_variables()
shared.var1 = 'boo'
shared.var2 = 'baa'

这提供了对共享顶级变量的轻松访问,而无需使用 'global' 关键字将它们引用到本地函数中。

与使用 'global' / 'non-local' 关键字相比,使用容器 class 是否有任何缺点(性能或其他方面)?

我认为共享模块的方法是惯用的。我不能说什么在 python 内部结构方面更有效,但是一旦构建了 class 就不会有速度损失。

我觉得照着做应该没什么缺点吧

你也可以使用闭包;例如阅读:

在某些情况下,它可以提供一种优雅的方式来实现这样的目标。如果你想改变共享变量的值,你应该把它们放在一些可变类型中(如果你正在使用列表、字典、集合等,这可能已经是这种情况)

这是一个简单的例子:

def initialize():
  var1 = ['boo']
  var2 = ['baa']
  def f1(x):
    var2[0] = var1[0]
    var1[0] = x
  def f2():
    print(var1, var2)
  return f1, f2

f1, f2 = initialize()

f2()
f1("test")
f2()