Explicación de uso detallada de global y no local en Python

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

Supongo que te gusta

Origin blog.csdn.net/Matrix_cc/article/details/105757172
Recomendado
Clasificación