def scope_test():

def do_local():
    spam = "local spam"

def do_nonlocal():
    nonlocal spam
    spam = "nonlocal spam"

def do_global():
    global spam
    spam = "global spam"#spam虽然声明了global但此处仍是函数内的局部变量

spam = "test spam"
do_local()
print("After local assignment: ",spam)#"test spam"

do_nonlocal()
print("After nonlocal assignment: ",spam)# "nonlocal spam"

do_global()
print("After global assignment: ",spam)# 

scope_test()
print("In global scope: ",spam)#do_global函数会自己定义一个全局变量spam,即使没有预先定义的全局变量

https://www.jb51.net/article/114951.htm