作用域和函数嵌套
def scope_test(): # 外函数
def do_local(): # 内函数1
spam = "local spam"
def do_nonlocal(): # 内函数2
nonlocal spam
spam = "nonlocal spam" # 修改局部变量
def do_global(): # 内函数3
global spam
spam = "global spam" # 修改全局变量
spam = "test spam" # 局部变量 spam
do_local() # 内函数1执行完后释放空间,不影响外函数的局部变量
print("After local assignment:", spam) # 打印 'test spam'
do_nonlocal() # 内函数2 nonlocal 申明,内函数2将可以对外函数的局部变量 spam 进行修改
print("After nonlocal assignment:", spam) # 打印 'nonlocal spam'
do_global() # 内函数3 global 申明,定义一个全局变量 spam = 'global spam'
print("After global assignment:", spam) # 在外函数内部,打印和全局变量的同名变量,按LEGB优先级,spam = 'nonlocal spam'
scope_test()
print("In global scope:", spam) # 这里的 spam 是 global 申明的全局变量
1.在函数外,无法直接调用函数内的局部变量。
2.若要在函数内对全局变量修改,需global申明。
3.在嵌套函数内,内函数要对外函数的局部变量进行修改,需nonlocal申明。
4.在函数内若已经对全局变量进行调用,则后续不能在函数内直接修改该变量。(未global申明)
类似的,嵌套函数中,若内函数已经对外函数的局部变量进行调用,则后续不能在内函数中直接修改该变量。(未nonlocal申明)
ps:当笔记发了,有错的地方还请大佬指出


查看17道真题和解析