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()
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()
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()
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()
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))
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()
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