Tutorial de Python - Namescape y Scope

Jinku Hu 30 enero 2023
  1. Nombre en Python
  2. Espacio de nombres en Python
  3. Alcance de las variables en Python
  4. Uso del Ámbito y del espacio de nombres en Python
Tutorial de Python - Namescape y Scope

En esta sección, aprenderá el espacio de nombres y el alcance de una variable en la programación en Python.

Nombre en Python

Un nombre en Python es un identificador dado al objeto. Python es un lenguaje de programación orientado a objetos, lo que significa que todo es un objeto en Python y los nombres se usan para acceder a los objetos.

Por ejemplo, cuando asignas un valor a una variable x = 3. Aquí 3 es un objeto y se almacena en una ubicación de memoria (RAM). Esta ubicación de memoria es una ubicación de memoria con nombre a la que se puede acceder con el nombre x. La dirección de este objeto (3) puede ser obtenida usando la función incorporada id().

x = 3
print("id(3) =", id(3))
print("id(x) =", id(x))
id(3) = 1864160336
id(x) = 1864160336

Ahora aquí el objeto 3 está almacenado en una ubicación cuyo nombre es x y por lo tanto la dirección de ambos es la misma.

Cuando asigne el valor de x a alguna otra variable digamos y y cambie el valor de x, entonces x tendrá una nueva ubicación y y tendrá la ubicación de la anterior x. Esto se demuestra a continuación:

x = 3
print("id(x) =", id(x))
x = 4
print("id(4) =", id(4))
print("id(x) =", id(x))
y = 3
print("id(y) =", id(y))
id(x) = 1864160336
id(4) = 1864160352
id(x) = 1864160352
id(y) = 1864160336

Puedes ver aquí que la dirección de y es igual a la de la antigua x.

Espacio de nombres en Python

Un espacio de nombres es una colección de nombres. Un espacio de nombres es una asignación de nombre a un objeto y se implementa como un diccionario en Python. Los espacios de nombres aseguran que cada nombre utilizado en un programa sea único.

Los espacios de nombres se crean al iniciar el intérprete y se eliminan al finalizar la ejecución del programa. Este espacio de nombres contiene todos los nombres incorporados, así que siempre que necesite una función incorporada, por ejemplo id(), puede utilizarla directamente en su programa.

Cuando llama una función, se crea un área de nombres local que contiene todos los nombres definidos.

Alcance de las variables en Python

Cuando se crea una variable en el programa, es posible que no se pueda acceder a esa variable desde todas las partes del programa. Esto se debe al alcance de las variables. Intenta acceder a las variables desde el espacio de nombres donde no están definidas.

Un scope puede definirse como un lugar desde el que puedes acceder a tu espacio de nombres sin ningún prefijo.

El Scope se puede categorizar como:

  1. Ámbito de una función donde se tienen nombres locales.
  2. Ámbito de un módulo en el que se tienen variables globales.
  3. Ámbito de una función donde tiene nombres incorporados.

Cuando se crea una referencia dentro de una función, se busca primero en el espacio de nombres local y luego se busca en el espacio de nombres global; si no se encuentra en ningún sitio se buscará en el espacio de nombres incorporado.

Cuando cree una función anidada, tendrá un nuevo ámbito dentro del ámbito local.

Uso del Ámbito y del espacio de nombres en Python

def outer():
    x = 12

    def inner():
        y = 13


z = 14

Aquí se define una función anidada (función dentro de otra función). La variable y está en el espacio de nombres local anidado de la función interna, la variable x está en el espacio de nombres local de la función externa y la variable z está en el espacio de nombres global.

Cuando está dentro de la función interna, la variable y es una variable local, x no es local y z es global. La función interna no tiene acceso a las variables x no locales y z globales.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook