python - 特定功能的非本地绑定
问题描述
x = 0
def outer():
x = 1
def inner():
nonlocal x
x = 2
def vnat():
nonlocal x
x = 5
print('vnat:', x)
vnat()
print('inner:', x)
inner()
print('outer:', x)
outer()
print('global:', x)
结果如下:
vnat: 5
inner: 5
outer: 5
global: 0
为什么def outer()
取def vnat()
(5) 的值?以及如何使用[2]def outer()
的值指定?nonlocal x
def inner()
我需要的输出:
vnat: 5
inner: 5
outer: 2
global: 0
解决方案
每当您指定nonlocal x
时,它将引用封闭范围的名称。因此,在您的示例中,您有以下范围嵌套:
global --> outer --> inner --> vnat
| | | |
v v v v
x=0 x=1 <--nl--x <--nl--x "nl" stands for "nonlocal"
所以vnat
指的是其封闭范围x
(即 的范围inner
),而后者又指其封闭范围x
(即 的范围outer
)。因此,如果您分配给x
in vnat
,它将有效地分配给outer
's name x
。
推荐阅读
- amazon-web-services - 尝试在 AWS Linux 中打开 Jupyter Notebook 时出现“无法访问此站点”错误
- r - Common guide legend between different geom_sf ggplots
- http - Delphi - 如何在我的 HTTP 页面上通过 Indy 创建文件夹
- asp.net-core - Entity Framework Core 通过导航名称预先加载(字符串)
- javascript - 问题:我想学习如何使用谷歌应用脚本将数字从网站导入谷歌表格
- java - org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer 上的错误处理条件
- django - 表单中的数据不保存在数据库中(无法验证)
- c# - 在 Visual Studio 2019 的 Program.cs 文件顶部自动生成注释
- android - 假数据预览自定义视图
- c# - 等腰三角形 c#