global和nonlocal 详解认知
#global只改变全局变量,nonlocal只改变上一层的局部变量。 global和nonlocal在哪层就使用哪层的变量分别充当全局或上一层局部变量。
#当nonlocal的上一层是全局变量 而其他层使用global也改变全局变量,则报错。
#无论global还是nonlocal 都是改变全局变量或上一层局部变量的引用地址。 而不是覆盖 原 全局变量或局部变量的地址上的内容。
"""如例子所示 当go1使用了global最外层原本应显示为num=11的数值被改成了10,但是原本11的地址还存在,打印的是num=10的地址,因此说明
只改变了num的引用地址,并没有覆盖原num=11的地质内容"""
import ctypes
num =11
def go():
num=9
def go1():
global num
num = 10
print(num,id(num))#未使用globa的num值 2
go1()
print(num,id(num))#使用global的num值,未对中间的num存在影响 3
k = id(num)
print(num,k)#一开始的全局num值 1
go()
print(num,id(num))#使用global后的num值 4
get1=ctypes.cast(k,ctypes.py_object).value
print(get1)#使用了global后原num=11的值依然存在,地址并没有改变 5