从 Python 中的双重嵌套函数内访问变量

发布于 2024-08-22 05:53:16 字数 465 浏览 7 评论 0原文

以下代码:

x = 0
print "Initialization: ", x
def f1():
    x = 1
    print "In f1 before f2:", x
    def f2():
        global x
        x = 2
        print "In f2:          ", x
    f2()
    print "In f1 after f2: ", x
f1()
print "Final:          ", x

打印:

Initialization:  0
In f1 before f2: 1
In f2:           2
In f1 after f2:  1
Final:           2

f2 有办法访问 f1 的变量吗?

The following code:

x = 0
print "Initialization: ", x
def f1():
    x = 1
    print "In f1 before f2:", x
    def f2():
        global x
        x = 2
        print "In f2:          ", x
    f2()
    print "In f1 after f2: ", x
f1()
print "Final:          ", x

prints:

Initialization:  0
In f1 before f2: 1
In f2:           2
In f1 after f2:  1
Final:           2

Is there a way for f2 to access f1's variables?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼眸印温柔 2024-08-29 05:53:16

您可以访问变量,问题是赋值。在 Python 2 中,无法将 x 重新绑定到新值。有关详细信息,请参阅 PEP 227(嵌套范围)。

在 Python 3 中,您可以使用新的 nonlocal 关键字而不是 global。请参阅 PEP 3104

You can access the variables, the problem is the assignment. In Python 2 there is no way to rebind x to a new value. See PEP 227 (nested scopes) for more on this.

In Python 3 you can use the new nonlocal keyword instead of global. See PEP 3104.

天荒地未老 2024-08-29 05:53:16

在 Python 3 中,您可以将 x 定义为 nonlocal 在 f2 中。

在Python 2中,你不能直接给f2中的f1的x赋值。但是,您可以读取其值并访问其成员。所以这可能是一个解决方法:

def f1():
    x = [1]
    def f2():
        x[0] = 2
    f2()
    print x[0]
f1()

In Python 3, you can define x as nonlocal in f2.

In Python 2, you can't assign directly to f1's x in f2. However, you can read its value and access its members. So this could be a workaround:

def f1():
    x = [1]
    def f2():
        x[0] = 2
    f2()
    print x[0]
f1()
水中月 2024-08-29 05:53:16

删除 global 语句:

>>> x
0
>>> def f1():
    x = 1
    print(x)
    def f2():
        print(x)
    f2()
    print(x)


>>> f1()
1
1
1

如果您想从 f1更改变量 x 那么您需要使用 global每个函数中的 语句。

remove global statement:

>>> x
0
>>> def f1():
    x = 1
    print(x)
    def f2():
        print(x)
    f2()
    print(x)


>>> f1()
1
1
1

if you want to change variable x from f1 then you need to use global statement in each function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文