你能给父函数中定义的变量赋值吗?

2024-06-16 14:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Python nested functions variable scoping

经过反复试验,我终于发现这行不通:

def a():
    def b():
        print x
        x=2
    x = 1
    b()
    print x

您将得到一个异常(在被引用之前没有定义x)。所以看起来b可以读取x,但是如果它试图赋值给它,Python会将它对x的解释改为一个局部变量,现在还没有定义。在

我也有一个奇怪的问题:有什么方法可以实现这一点?有没有一种方法可以显式地访问父函数的作用域?(x不是全局的)


Tags: 方法函数定义deffunctions全局作用域variable
1条回答
网友
1楼 · 发布于 2024-06-16 14:54:48

python3中的^{} statement将执行此操作。在


编辑:在Python2中,没有一种简单的方法来完成。如果需要这个功能,我建议您使用一些可变容器对象。例如:

def a():
    def b():
        print d["x"]
        d["x"]=2
    d = dict(x=1)
    b()
    print d["x"]

如果您绝对必须为cpython2仿真nonlocal,那么可以使用Python C API进行如下修改:

^{pr2}$

您还可以将帧设置为local,而不是调用PyFrame_LocalsToFast(),而是操作a的字节码,使其使用LOAD_NAME而不是{}。请不要做这两件事。你的用例肯定有更好的解决方案。在

相关问题 更多 >