作用域和函数嵌套
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:当笔记发了,有错的地方还请大佬指出