使用python类来包装共享变量与使用global / nonlocal?

时间:2015-03-29 11:40:37

标签: python class variables global

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

# 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”关键字将其引用到本地函数中。

使用容器类与使用“全局”/“非本地”关键字有任何缺点(表现或其他方面)吗?

2 个答案:

答案 0 :(得分:1)

我认为共享模块的方法是惯用的。我无法谈论python内部方面的效率,但是一旦构建了类,就不会有速度惩罚。

答案 1 :(得分:0)

如果你按照自己的意愿行事,我认为不应该有任何缺点。

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

在某些情况下,它可以提供实现这一目标的优雅方式。如果要更改共享变量的值,则应将它们置于某种可变类型中(如果使用列表,字典,集合等,可能就是这种情况)。

这是一个简单的例子:

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()