[英]Why is nonlocal keyword being 'interrupted' by a global keyword?
我是一个初学程序员,正在尝试学习python,我遇到了范围主题。 在执行最底层的代码时,我遇到了错误'找不到非本地var_name的绑定'。 有人可以解释为什么nonlocal关键字无法“超越”中间函数并进入外部函数?
#this works
globe = 5
def outer():
globe = 10
def intermediate():
def inner():
nonlocal globe
globe = 20
print(globe)
inner()
print(globe)
intermediate()
print(globe)
outer()
globe = 5
def outer():
globe = 10
def intermediate():
global globe #but not when I do this
globe = 15
def inner():
nonlocal globe #I want this globe to reference 10, the value in outer()
globe = 20
print(globe)
inner()
print(globe)
intermediate()
print(globe)
outer()
涉及nonlocal
关键字的表达式将导致Python尝试在封闭的本地范围中查找变量,直到它首次遇到第一个指定的变量名 。
nonlocal globe
表达式将查看intermediate
函数中是否存在名为globe
的变量。 然而,它会在global
范围内遇到它,因此它会假定它已经达到模块范围并且在没有找到非nonclocal
范围的情况下完成搜索它,因此是例外。
通过在intermediate
函数中声明global globe
,您几乎关闭了在前一个作用域中使用相同名称访问任何nonlocal
变量的路径。 您可以在这里查看讨论为什么“决定”在Python中以这种方式实现。
如果要确保变量globe
是否在某个函数的局部范围内,可以使用dir()
函数,因为来自Python文档 :
如果没有参数,则返回当前本地范围中的名称列表。 使用参数,尝试返回该对象的有效属性列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.