为什么非局部不创建新的外部变量(与全局不同)



在阅读Python3教程时,我注意到globalnonlocal关键字之间存在差异。

如果我尝试以下代码,它会起作用:

# Does not need: spam = ''
def global_scope_test():
def do_global():
global spam
spam = 'global spam'
do_global()
global_scope_test()
print(spam)

而以下情况则不然:

def nonlocal_scope_test():
# Needs: spam = ''
def do_nonlocal():
nonlocal spam
spam = 'nonlocal spam'
do_nonlocal()
print(spam)
nonlocal_scope_test()

为什么允许global在全局作用域中创建新绑定,而不允许nonlocal在外部作用域中新建绑定?考虑到这两种功能的相似性,这似乎是一个奇怪的怪癖。教程似乎没有强调示例中的差异,我也找不到任何线程在谈论它。

非本地的文档对此很清楚:

非本地语句中列出的名称,不同于全局语句中的名称语句,必须引用封闭范围中预先存在的绑定(不能在其中创建新绑定的范围明确确定(。

相关内容

  • 没有找到相关文章

最新更新