Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Espacios de nombres y ámbito de variables en Python: Entendiendo nombres, enlaces y alcances

Espacios de nombres y ámbito de variables en Python

Explore cómo funcionan los nombres, espacios de nombres y ámbitos de variables en Python, con ejemplos claros y mejores prácticas.

¿Qué es un nombre en Python?

En "El Zen de Python" (import this), la última línea dice: "¡Los espacios de nombres son una idea genial -- hagamos más de esos!" Entonces, ¿qué son estos espacios de nombres? Primero, definamos un nombre.

Un nombre, o identificador, es una etiqueta que referencia un objeto. Todo en Python es un objeto, y un nombre proporciona una forma conveniente de acceder a él.

Por ejemplo, cuando ejecutamos a = 2, el entero 2 se almacena en memoria y a se convierte en su referencia. La función integrada id() devuelve la dirección de memoria de un objeto.

# Nota: Sus valores id pueden diferir
a = 2
print('id(2) =', id(2))
print('id(a) =', id(a))

Salida

id(2) = 9302208
id(a) = 9302208

Ambos nombres apuntan al mismo objeto, así sus valores id() coinciden. Veamos qué pasa cuando reasignamos a:

# Nota: Sus valores id pueden diferir
a = 2
print('id(a) =', id(a))
a = a + 1
print('id(a) =', id(a))
print('id(3) =', id(3))
b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))

Salida

id(a) = 9302208
id(a) = 9302240
id(3) = 9302240
id(b) = 9302208
id(2) = 9302208

Cuando a = a + 1 se ejecuta, se crea un nuevo objeto 3, y a ahora lo referencia. Observe que id(a) y id(3) son idénticos. La asignación subsiguiente b = 2 simplemente enlaza b al objeto existente 2, evitando almacenamiento duplicado.

Espacios de nombres y ámbito de variables en Python: Entendiendo nombres, enlaces y alcances

Este enlace dinámico de nombres es lo que hace Python flexible: un solo identificador puede apuntar a valores de cualquier tipo—incluyendo funciones.

def imprimirHola():
    print("Hola")
a = imprimirHola
a()

Salida

Hola

El identificador a ahora referencia la función imprimirHola, que podemos invocar directamente.


¿Qué es un espacio de nombres?

Un espacio de nombres es un mapeo de nombres a objetos. Piénselo como un diccionario que contiene cada identificador que ha definido junto con su objeto asociado.

Python soporta múltiples espacios de nombres simultáneamente, cada uno aislado de los otros. El intérprete crea un espacio de nombres global conteniendo todos los nombres integrados que persiste durante la vida de la sesión. Cada módulo obtiene su propio espacio de nombres global, y cada definición de función o clase introduce un nuevo espacio de nombres local.

Espacios de nombres y ámbito de variables en Python: Entendiendo nombres, enlaces y alcances

Ámbito de variables en Python

Mientras los espacios de nombres existen, el ámbito determina dónde se puede acceder a un nombre sin calificación.

En cualquier momento, un programa tiene al menos tres ámbitos anidados:

  1. El ámbito local de la función actualmente en ejecución.
  2. El ámbito global del módulo.
  3. El ámbito integrado que siempre está disponible.

Cuando un nombre se referencia dentro de una función, Python busca primero en el espacio de nombres local, luego el global, y finalmente el integrado. Si una función contiene otra función, la interna introduce un nuevo ámbito anidado.


Ejemplo: Interacción de ámbito y espacio de nombres

Considere el siguiente código:

def funcion_externa():
    b = 20
    def funcion_interna():
        c = 30
a = 10

Aquí, a vive en el espacio de nombres global del módulo. La variable b es local a funcion_externa, y c pertenece al espacio de nombres local anidado de funcion_interna.

Dentro de funcion_interna, c es local, b es no-local, y a es global. Puede leer y escribir c, pero solo leer b y a a menos que los declare explícitamente con global o nonlocal.

Aquí hay una ilustración más concreta:

def funcion_externa():
    a = 20
    def funcion_interna():
        a = 30
        print('a =', a)
    funcion_interna()
    print('a =', a)
a = 10
funcion_externa()
print('a =', a)

La salida demuestra tres enlaces distintos de a:

a = 30
a = 20
a = 10

Para forzar todas las asignaciones al a global, use la palabra clave global:

def funcion_externa():
    global a
    a = 20
    def funcion_interna():
        global a
        a = 30
        print('a =', a)
    funcion_interna()
    print('a =', a)
a = 10
funcion_externa()
print('a =', a)

La salida ahora refleja un único a global:

a = 30
a = 30
a = 30

Estos ejemplos ilustran cómo las reglas de espacio de nombres y ámbito de Python gobiernan la visibilidad y mutación de variables.

python

  1. Palabras clave e identificadores en Python: Dominando palabras reservadas y convenciones de nomenclatura
  2. Sentencias, indentación y comentarios en Python: Guía clara
  3. Variables, constantes y literales en Python – Guía completa
  4. Dominando conversión y casting de tipos en Python: Guía completa
  5. Dominando E/S e importación de módulos en Python: Guía práctica
  6. Dominando operadores en Python: Guía completa
  7. Entendiendo variables globales, locales y nonlocal en Python
  8. Dominando Números, Conversión de Tipos y Matemáticas en Python
  9. Dominando Operaciones de Directorios y Archivos en Python
  10. Dominando Errores y Excepciones Integradas en Python
  11. Obtener la Fecha y Hora Actual en Python: Guía Práctica