使用 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 就不会有速度损失。
我觉得照着做应该没什么缺点吧
你也可以使用闭包;例如阅读:
- http://www.programiz.com/python-programming/closure
- http://www.shutupandship.com/2012/01/python-closures-explained.html
- http://ynniv.com/blog/2007/08/closures-in-python.html
在某些情况下,它可以提供一种优雅的方式来实现这样的目标。如果你想改变共享变量的值,你应该把它们放在一些可变类型中(如果你正在使用列表、字典、集合等,这可能已经是这种情况)
这是一个简单的例子:
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()
我发现创建一个空 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 就不会有速度损失。
我觉得照着做应该没什么缺点吧
你也可以使用闭包;例如阅读:
- http://www.programiz.com/python-programming/closure
- http://www.shutupandship.com/2012/01/python-closures-explained.html
- http://ynniv.com/blog/2007/08/closures-in-python.html
在某些情况下,它可以提供一种优雅的方式来实现这样的目标。如果你想改变共享变量的值,你应该把它们放在一些可变类型中(如果你正在使用列表、字典、集合等,这可能已经是这种情况)
这是一个简单的例子:
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()