我很担心LEGB的规则如何适用于此。一世 了解Local可以在函数或类方法中使用 例。封闭的可以是其封闭功能,例如,如果是功能 被包装在另一个函数中。全球指最上层 执行脚本本身的级别,内置是特殊名称 Python为自己保留。我只是不知道它在这里是如何应用的>为什么输出就是它。谢谢
a = 'global'
def outer():
def len(in_var):
print('called my len() function: ')
l = 0
for i in in_var:
l += 1
return l
a = 'local'
def inner():
global len
nonlocal a
a += ' variable'
inner()
print('a is', a)
print(len(a))
outer()
print(len(a))
print('a is', a)
输出
('a is', 'local')
called my len() function:
5
15
('a is', 'global variable')
答案 0 :(得分:0)
我正在使用3.4.2
获得以下结果a is local variable
called my len() function:
14
6
a is global
为了解释,实际上你得到了几乎所有重要的细节,但关键点是nonlocal
语句使标识符引用最近的封闭范围中的先前绑定变量,这意味着a
在{ {1}}在此之后引用并影响inner()
; a = 'local'
使用print('a is', a)
作为长度为14.但是在全球范围内local variable
仍然有效。
您能否分享一下我们可以调查差异的环境细节?