¿Cuál es la diferencia entre una variable global y libre en Python?

Una variable global es una variable cuyo alcance es un módulo completo.

Una variable libre en un bloque de código es una variable que se usa allí pero no se define allí.

A menudo se superponen.

Algunos ejemplos:

  x = 1
 def foo ():
    imprimir (x)

En el primer ejemplo, x es una variable global y, en foo, x es una variable libre . Entonces este es un caso donde se superponen.

  x = 1
 def foo ():
    x = 2
    imprimir (x)

En el segundo ejemplo, hay dos variables llamadas “x” : la variable global y la variable local para foo. No hay variables libres.

(Nota al margen: para hacer referencia a la variable global x desde foo , use la declaración global x .)

  def bar ():
    x = 1
    def foo ():
       y = 2
       imprimir (x)
       imprimir (y)

En el tercer ejemplo, x es local para bar e y es local para foo. En foo, x es una variable libre. No hay variables globales.