Uso de palabras clave no locales versus uso de palabras clave globales en Python

Requisitos previos: Variables globales y locales en Python
Antes de pasar a no local y global en Python. Consideremos algunos escenarios básicos en funciones anidadas.

Python3

def fun():
    var1 = 10
 
    def gun():
        print(var1)
        var2 = var1 + 1
        print(var2)
 
    gun()
fun()
Producción: 

10
11

 

La variable var1 tiene alcance en toda la función(). Será accesible desde la función anidada de fun()

Python3

def fun():
    var1 = 10
 
    def gun():
        # gun() initializes a new variable var1.
        var1 = 20
        print(var1, id(var1))
 
    print(var1, id(var1))
    gun()
fun()
Producción: 

10 10853920
20 10854240

 

En este caso, gun() inicializó la nueva variable var1 en el alcance de gun . var1 con valor 10 y var1 con valor 20 son dos variables diferentes y únicas. Se accederá por defecto al valor de retención var1 20 en gun().

Considerando el ejemplo anterior, sabemos que guns inicializará una nueva variable var1 en su propio alcance. Pero cuando va a hacerlo, todavía
no puede encontrar el valor de var1 para realizar la operación aritmética ya que no se ha asignado ningún valor a var1 previamente en gun() 

Python3

def fun():
    var1 = 10
 
    def gun():
        # tell python explicitly that it
        # has to access var1 initialized
        # in fun on line 2
        # using the keyword nonlocal
        nonlocal var1
        var1 = var1 + 10
        print(var1)
 
    gun()
fun()
Producción: 

20

 

En este ejemplo, antes de inicializar var1 en gun(). Le hemos dicho explícitamente a Python que no inicialice una nueva variable, sino que acceda a var1 presente ya en la línea 2. usando la palabra clave nonlocal Entonces, cuando el intérprete realiza la suma, accede al valor 10 (ya presente) y se evita el error.

Pasemos ahora a la palabra clave global. Considere los ejemplos dados a continuación 

Python3

var1 = 10
def fun():
    # global variable var1 will
# be read or accessed in fun()
    print('var1 is', var1)
 
fun()
Producción: 

var1 is 10

 

La variable global var1 será simplemente leída o accedida dentro de la función fun()

Python3

var1 = 10
def fun():
    # new local variable var1
    # will be initialized in fun()
    var1 = 20
    print('var1 is', var1)
    print('var1 is at', id(var1))
 
fun()
print('var1 is', var1)
print('var1 is at', id(var1))
Producción: 

var1 is 20
var1 is at 10854240
var1 is 10
var1 is at 10853920

 

Se inicializará una nueva variable var1 en fun(). La variable global var1 será diferente de la variable local var1 de fun(). Por defecto en fun(), se accederá a las variables locales.

Teniendo en cuenta el ejemplo anterior, sabemos que fun() inicializará una nueva variable var1 en su propio ámbito. Pero cuando va a hacerlo, todavía no puede encontrar el valor de var1 , 
para realizar la operación aritmética ya que no se ha asignado ningún valor a var1 previamente en fun()

Python3

var1 = 10
def fun():
    # tell python explicitly do not
    # initialise a new variable
    # instead access var1 which
    # has global scope
    global var1
    var1 = var1 + 20
    print('var1 is', var1)
 
fun()
Producción: 

var1 is 30

 

En este ejemplo, antes de inicializar var1 en fun(). Le hemos dicho explícitamente a Python que no inicialice una nueva variable, sino que acceda a var1 presente ya en la línea 1. usando la palabra clave global Entonces, cuando el intérprete realiza la suma, accede al valor 10 (ya presente) y se evita el error.
 

Publicación traducida automáticamente

Artículo escrito por abhijeet_rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *