Я заметил разницу между ключевыми словами global
и nonlocal
при чтении учебника Python 3 здесь .
Если я попробую следующий код, он будет работать :
# 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
не разрешается создавать новые привязки во внешнем объеме? Это похоже на странную причуду, учитывая сходство двух функций. Учебное пособие не показало разницу в примере, и я не смог найти ни одной темы, говорящей об этом.