【发布时间】:2018-12-19 14:46:10
【问题描述】:
之前我以为我们定义一个函数的时候,这个函数可能是错的,但是python直到它被执行才检查它:
x = 100
def f():
x = 1/0
return x
print(x)
# >>> 100
然而,当我在学习nonlocal 声明时
x = 100
def f():
def g():
nonlocal x
x = x * 99
return x
return g
print(x)
# >>> SyntaxError: no binding for nonlocal 'x' found
即使函数没有执行,它也被检出。
在哪里可以找到官方的解释?
变量边界情况的补充:
x = 100
def f():
global x
global xx
x = 99
return x
print(f())
# >>> 99
print(x)
# >>> 99
如果我global 一些根本不存在的变量,它似乎完全没问题?
而且即使我执行这个函数也不会带来任何错误?
这部分被移到一个新的个人问题: Why am I able to global a non-existing varlable in python
【问题讨论】:
-
nonlocal 表示该名称存在于外部词法函数作用域中,在上面的示例中,外部词法函数作用域是 f() 因为你没有得到绑定异常。更多细节 - stackoverflow.com/questions/8050502/…
-
@MONTYHS 我知道
nonlocal是做什么的,我只是想问为什么在函数没有执行时会检查这个
标签: python