Espacios de nombres y alcance en Python

Qué es el espacio de nombres:

Un espacio de nombres es un sistema que tiene un nombre único para todos y cada uno de los objetos en Python. Un objeto puede ser una variable o un método. Python mismo mantiene un espacio de nombres en forma de diccionario de Python. Veamos un ejemplo, una estructura de sistema de directorios y archivos en las computadoras. No hace falta decir que uno puede tener varios directorios con un archivo con el mismo nombre dentro de cada directorio. Pero uno puede ser dirigido al archivo, si lo desea, simplemente especificando la ruta absoluta al archivo. 
Ejemplo en tiempo real, el papel de un espacio de nombres es como un apellido. Es posible que uno no encuentre una sola «Alice» en la clase, puede haber varias «Alice», pero cuando pregunte particularmente por «Alice Lee» o «Alice Clark» (con un apellido), solo habrá una (el momento no se No creo que tanto el nombre como el apellido sean iguales para varios estudiantes).
De manera similar, el intérprete de Python comprende qué método exacto o variable está tratando de señalar en el código, según el espacio de nombres. Entonces, la división de la palabra en sí da un poco más de información. Su Nombre (que significa nombre, un identificador único) + Espacio (que habla de algo relacionado con el alcance). Aquí, un nombre puede ser cualquier método o variable de Python y el espacio depende de la ubicación desde donde se intenta acceder a una variable o método.
 

Tipos de espacios de nombres:
 

Cuando el intérprete de Python se ejecuta únicamente sin módulos, métodos, clases, etc. definidos por el usuario. Algunas funciones como print(), id() siempre están presentes, estos son espacios de nombres integrados. Cuando un usuario crea un módulo, se crea un espacio de nombres global, luego la creación de funciones locales crea el espacio de nombres local. El espacio de nombres integrado abarca el espacio de nombres global y el espacio de nombres global abarca el espacio de nombres local .
 

La vida útil de un espacio de nombres:
 

El tiempo de vida de un espacio de nombres depende del alcance de los objetos, si el alcance de un objeto termina, el tiempo de vida de ese espacio de nombres llega a su fin. Por lo tanto, no es posible acceder a los objetos del espacio de nombres interno desde un espacio de nombres externo.
 

Ejemplo: 

Python3

# var1 is in the global namespace
var1 = 5
def some_func():
 
    # var2 is in the local namespace
    var2 = 6
    def some_inner_func():
 
        # var3 is in the nested local
        # namespace
        var3 = 7

Como se muestra en la siguiente figura, el mismo nombre de objeto puede estar presente en varios espacios de nombres, ya que su espacio de nombres mantiene el aislamiento entre el mismo nombre.

Pero en algunos casos, uno podría estar interesado en actualizar o procesar solo variables globales, como se muestra en el siguiente ejemplo, uno debe marcarlo explícitamente como global y actualizar o procesar. Tenga en cuenta que la línea «recuento = recuento +1» hace referencia a la variable global y, por lo tanto, utiliza la variable global, pero compárelo con la misma línea escrita «recuento = 1». Luego, la línea «recuento global» es absolutamente necesaria de acuerdo con las reglas de alcance.

Python3

# Python program processing
# global variable
 
count = 5
def some_method():
    global count
    count = count + 1
    print(count)
some_method()

Producción: 

6

Alcance de los objetos en Python:
 

El alcance se refiere a la región de codificación desde la cual se puede acceder a un objeto particular de Python. Por lo tanto, no se puede acceder a ningún objeto en particular desde ningún lugar del código, el acceso debe estar permitido por el alcance del objeto.
Tomemos un ejemplo para tener una comprensión detallada de la misma: 
 

Ejemplo 1: 

Python3

# Python program showing
# a scope of object
 
def some_func():
    print("Inside some_func")
    def some_inner_func():
        var = 10
        print("Inside inner function, value of var:",var)
    some_inner_func()
    print("Try printing var from outer function: ",var)
some_func()

Producción: 

Inside some_func
Inside inner function, value of var: 10

Traceback (most recent call last):
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 8, in 
    some_func()
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 7, in some_func
    print("Try printing var from outer function: ",var)
NameError: name 'var' is not defined

Publicación traducida automáticamente

Artículo escrito por Shivam Dhanadhya 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 *