说,外部范围,我有一些范围与变量,一个名为在此范围内的功能要改变一些不可改变的变量:访问在Python 2.6
def outer(): s = 'qwerty' n = 123 modify() def modify(): s = 'abcd' n = 456
是否有可能以某种方式来访问外部范围?类似于Py3k中的nonlocal
变量。
当然,在这种情况下,我可以做s,n = modify(s,n)
,但是如果我需要一些通用的“注入”,它在那里执行并且必须能够重新分配给任意变量呢?
我心目中的表现,因此,如果可能的话,eval
&堆栈帧检查不欢迎:)
UPD:这是不可能的。期。但是,如何在外部范围访问变量还有一些选项:
- 使用全局变量。顺便说一句,
func.__globals__
是一个可变的字典;)在一个字典/类实例 - 存储变量/任何其他可变容器
- 给变量作为自变量&让他们回来为一个元组:
a,b,c = innerfunc(a,b,c)
- 进样等功能的字节码。这可以通过
byteplay
python模块来实现。
这不是如何范围的作品。您要求访问另一个堆栈中的作用域。如果范围设定允许你在这里尝试,那么将会非常令人困惑,将尾递归重写为循环。所以,代码优化突然会改变程序的意义,这永远不会发生。 – Tino 2011-10-30 23:01:41