比如说,我有一些带有变量的作用域,并且在此作用域中调用的函数想要更改一些不可变变量:
def outer():
s = 'qwerty'
n = 123
modify()
def modify():
s = 'abcd'
n = 456
是否有可能以某种方式访问外部范围?就像是nonlocal
来自 Py3k 的变量。
我当然可以s,n = modify(s,n)
在这种情况下,但是如果我需要一些在那里执行并且必须能够重新分配给任意变量的通用“注入”怎么办?
我考虑的是性能,所以,如果可能的话,eval
& 不欢迎堆栈框架检查:)
UPD: 不可能。时期。但是,有一些选项如何访问外部作用域中的变量:
- 使用全局变量。顺便一提,
func.__globals__
是一个可变字典;)
- 将变量存储在字典/类实例/任何其他可变容器中
- 将变量作为参数并将它们作为元组返回:
a,b,c = innerfunc(a,b,c)
- 注入其他函数的字节码。这是可能的
byteplay
蟒蛇模块。
在函数外部定义变量并使用global
关键词。
s, n = "", 0
def outer():
global n, s
n = 123
s = 'qwerty'
modify()
def modify():
global n, s
s = 'abcd'
n = 456
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)