python - Python 非本地和全局如何协同工作?
问题描述
这是我的例子
x=0
def outer():
x = 1
def i1():
nonlocal x
x = 2
print("inner1:", x)
i1()
print("outer:", x)
def i2():
nonlocal x
x = 3
print("inner2:", x)
i2()
print("outer:", x)
def i3():
global x
print("inner3:", x)
i3()
print("outer:", x)
outer()
print("global:", x)
我的 Jupyter 中的输出
inner1: 2
outer: 2
inner2: 3
outer: 3
inner3: 0
outer: 3
global: 0
为什么外部的值为0?
解决方案
在i3()
中,当你声明时global x
,它确实使用了最外层x
,但你没有改变它的值。
在这部分代码中:
i3()
print("outer:", x)
该print
命令在方法之外,因此未i3()
使用全局。这是将使用的本地。命令 in意味着只有使用的inside 才是全局的。一旦在外面,声明的范围将结束。x
x
global
i3()
x
i3()
i3()
global
x
因此,print("outer:", x)
打印 3,这是outer()
方法的局部变量的值。最外层x
始终为 0。
推荐阅读
- r - 如何在 R 中子集从 1.1.1961 到 31.12.2010 的时间段
- sql - 如何标准化一列以便能够解析成多列?
- angular - 取消订阅服务内部的 Observables?
- python - Matplotlib NavigationToolbar 重叠图(在 PyQt4 嵌入中)
- linux-device-driver - 如何使用 ixgbe 从 tcp4 的 RSS 散列中排除端口号
- javascript - 如何将具有相同键的所有值分组到一个数组中
- talend - 从文本文件加载上下文 - 无法读取加载的变量
- android - ImageView 问题,图像不显示或抛出错误
- sql-server - 在 Centos7 上连接 MS SQL 和 PHP 5.6
- css - 装扮 reactjs antd ant-carousel 子弹 - 有什么建议吗?