Uno, global
1. La palabra clave global se utiliza para utilizar variables globales en funciones u otros ámbitos locales. Pero si no modifica la variable global, tampoco puede utilizar la palabra clave global.
gcount = 0
def global_test():
gcount+=1
print (gcount)
global_test()
El código anterior reportará un error: la primera línea define la variable global, y la función externa es referenciada y modificada en la función interna , luego Python pensará que es una variable local, porque la función interna no define y asigna su cuenta , Entonces se informó un error.
2. Si desea modificar la variable global localmente, declare la variable global localmente
gcount = 0
def global_test():
global gcount
gcount+=1
print (gcount)
global_test()
La salida anterior es: 1
3. Si las variables globales no se declaran localmente y las variables globales no se modifican, se pueden utilizar normalmente.
gcount = 0
def global_test():
print (gcount)
global_test()
La salida anterior es: 0
Dos, no local
1. La variable declarada por nonlocal no es una variable local o una variable global, sino una variable en una función anidada externa
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
def make_counter_test():
mc = make_counter()
print(mc())
print(mc())
print(mc())
make_counter_test()
La salida anterior es:
1
2
3
Tres, uso mixto
def scope_test():
def do_local():
spam = "local spam" #此函数定义了另外的一个spam字符串变量,并且生命周期只在此函数内。此处的spam和外层的spam是两个变量,如果写出spam = spam + “local spam” 会报错
def do_nonlocal():
nonlocal spam #使用外层的spam变量
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignmane:", spam)
do_nonlocal()
print("After nonlocal assignment:",spam)
do_global()
print("After global assignment:",spam)
scope_test()
print("In global scope:",spam)
La salida anterior es:
Después de la asignación local: prueba de spam
Después de la asignación no local: spam no local
Después de la asignación global: spam no local
En el ámbito global: spam global
Referencia de este artículo: https://www.cnblogs.com/yuzhanhong/p/9183161.html