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

Espacio de nombres y alcance de Python

Ámbito y espacio de nombres de Python

En este tutorial, aprenderá sobre el espacio de nombres, la asignación de nombres a objetos y el alcance de una variable.

¿Qué es Nombre en Python?

Si alguna vez has leído 'El Zen de Python' (escribe import this en el intérprete de Python), la última línea dice, Los espacios de nombres son una gran idea, ¡hagamos más de eso! Entonces, ¿qué son estos espacios de nombres misteriosos? Veamos primero qué nombre es.

El nombre (también llamado identificador) es simplemente un nombre dado a los objetos. Todo en Python es un objeto. El nombre es una forma de acceder al objeto subyacente.

Por ejemplo, cuando hacemos la tarea a = 2 , 2 es un objeto almacenado en memoria y a es el nombre con el que lo asociamos. Podemos obtener la dirección (en RAM) de algún objeto a través de la función incorporada id() . Veamos cómo usarlo.

# Note: You may get different values for the id

a = 2
print('id(2) =', id(2))

print('id(a) =', id(a))

Salida

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

Aquí, ambos se refieren al mismo objeto 2 , por lo que tienen el mismo id() . Hagamos las cosas un poco más interesantes.

# Note: You may get different values for the id

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

¿Qué está sucediendo en la secuencia de pasos anterior? Usemos un diagrama para explicar esto:

Inicialmente, un objeto 2 se crea y el nombre a está asociado con él, cuando hacemos a = a+1 , un nuevo objeto 3 se crea y ahora a está asociado con este objeto.

Tenga en cuenta que id(a) y id(3) tienen los mismos valores.

Además, cuando b = 2 se ejecuta, el nuevo nombre b se asocia con el objeto anterior 2 .

Esto es eficiente ya que Python no tiene que crear un nuevo objeto duplicado. Esta naturaleza dinámica del enlace de nombres hace que Python sea poderoso; un nombre podría referirse a cualquier tipo de objeto.

>>> a = 5
>>> a = 'Hello World!'
>>> a = [1,2,3]

Todos estos son válidos y a se referirá a tres tipos diferentes de objetos en diferentes instancias. Las funciones también son objetos, por lo que un nombre también puede hacer referencia a ellas.

def printHello():
    print("Hello")


a = printHello

a()

Salida

Hello

El mismo nombre a puede referirse a una función y podemos llamar a la función usando este nombre.


¿Qué es un espacio de nombres en Python?

Ahora que entendemos qué son los nombres, podemos pasar al concepto de espacios de nombres.

En pocas palabras, un espacio de nombres es una colección de nombres.

En Python, puede imaginar un espacio de nombres como una asignación de cada nombre que haya definido a los objetos correspondientes.

Diferentes espacios de nombres pueden coexistir en un momento dado, pero están completamente aislados.

Se crea un espacio de nombres que contiene todos los nombres incorporados cuando iniciamos el intérprete de Python y existe mientras se ejecuta el intérprete.

Esta es la razón por la que funciones integradas como id() , print() etc. están siempre disponibles para nosotros desde cualquier parte del programa. Cada módulo crea su propio espacio de nombres global.

Estos diferentes espacios de nombres están aislados. Por lo tanto, el mismo nombre que puede existir en diferentes módulos no colisiona.

Los módulos pueden tener varias funciones y clases. Se crea un espacio de nombres local cuando se llama a una función, que tiene todos los nombres definidos en ella. Similar es el caso con la clase. El siguiente diagrama puede ayudar a aclarar este concepto.


Alcance variable de Python

Aunque hay varios espacios de nombres únicos definidos, es posible que no podamos acceder a todos ellos desde todas las partes del programa. Entra en juego el concepto de alcance.

Un alcance es la parte de un programa desde donde se puede acceder a un espacio de nombres directamente sin ningún prefijo.

En un momento dado, hay al menos tres ámbitos anidados.

  1. Alcance de la función actual que tiene nombres locales
  2. Alcance del módulo que tiene nombres globales
  3. Alcance más externo que tiene nombres incorporados

Cuando se hace una referencia dentro de una función, el nombre se busca en el espacio de nombres local, luego en el espacio de nombres global y finalmente en el espacio de nombres integrado.

Si hay una función dentro de otra función, se anida un nuevo ámbito dentro del ámbito local.


Ejemplo de alcance y espacio de nombres en Python

def outer_function():
    b = 20
    def inner_func():
        c = 30

a = 10

Aquí, la variable a está en el espacio de nombres global. Variable b está en el espacio de nombres local de outer_function() y c está en el espacio de nombres local anidado de inner_function() .

Cuando estamos en inner_function() , c es local para nosotros, b es no local y a es mundial Podemos leer y asignar nuevos valores a c pero solo puede leer b y a de inner_function() .

Si tratamos de asignar como valor a b , una nueva variable b se crea en el espacio de nombres local que es diferente al no local b . Lo mismo sucede cuando asignamos un valor a a .

Sin embargo, si declaramos a como global, todas las referencias y asignaciones van al global a . De manera similar, si queremos volver a vincular la variable b , debe declararse como no local. El siguiente ejemplo aclarará esto aún más.

def outer_function():
    a = 20

    def inner_function():
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

Como puede ver, la salida de este programa es

a = 30
a = 20
a = 10

En este programa, tres variables diferentes a se definen en espacios de nombres separados y se accede a ellos en consecuencia. Mientras está en el siguiente programa,

def outer_function():
    global a
    a = 20

    def inner_function():
        global a
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

La salida del programa es.

a = 30
a = 30
a = 30 

Aquí, todas las referencias y asignaciones son al a global debido al uso de la palabra clave global .


python

  1. Palabras clave e identificadores de Python
  2. Declaración, sangría y comentarios de Python
  3. Variables, constantes y literales de Python
  4. Conversión de tipos de Python y conversión de tipos
  5. Entrada, salida e importación de Python
  6. Operadores de Python
  7. Variables globales, locales y no locales de Python
  8. Números de Python, conversión de tipos y matemáticas
  9. Administración de archivos y directorios de Python
  10. Errores de Python y excepciones integradas
  11. ¿Cómo obtener la fecha y hora actuales en Python?