"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿`Exec ()` actualiza las variables locales en Python 3, y si no, cómo se puede hacer?

¿`Exec ()` actualiza las variables locales en Python 3, y si no, cómo se puede hacer?

Publicado el 2025-02-06
Navegar:637

Does `exec()` Update Local Variables in Python 3, and If Not, How Can It Be Made To?

Exec. ¿Puede actualizar las variables locales dentro de una función?

El dilema de Python 3

en Python 3, el siguiente fragmento de código no puede actualizar una variable local como se podría esperar:

def f (): a = 1 ejecutor ("a = 3") imprime (a)

en lugar del anticipado '3', imprime alarmantemente '1'!
def f():
    a = 1
    exec("a = 3")
    print(a)

el comportamiento de Python 2

curiosamente, el El mismo código en Python 2 actualizaría la variable local, imprimiendo '3'. Esta disparidad surge de un cambio fundamental en cómo Python maneja las variables locales.

El dilema de los locales

a diferencia de Python 2, Python 3 almacena variables locales en una matriz congelada optimizada en el momento de la compilación. Esta eficiencia tiene el costo de prohibir las modificaciones de tiempo de ejecución a los lugareños. Por lo tanto, la llamada EXEC predeterminada en Python 3 no puede alterar con éxito las variables locales.

la magia de locales ()

para evitar esta limitación y actualizar las variables locales, uno debe Pase explícitamente un diccionario de locales a Exec. Este diccionario almacenará las variables locales actualizadas después de la ejecución del código dinámico. El código revisado se ve así:

def foo ():: ldict = {} exec ("a = 3", globals (), ldict) a = ldict ['a'] imprime (a)

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)

La documentación de Python 3 advierte explícitamente contra la modificación del diccionario de locales () predeterminado mientras se usa Exec, ya que esto puede conducir a comportamiento impredecible. Para seguridad, uno siempre debe pasar un diccionario de locales explícito para ejecutarse al tener la intención de actualizar las variables locales.

las curiosas optimizaciones de Python

Georg Brandl Los comentarios de Python El informe de errores resalta que la optimización de Python 3 para las variables locales condujo al comportamiento actual. El compilador, incapaz de distinguir las funciones ejecutivas de las propias de Python, no puede ofrecerles un tratamiento especial. Por lo tanto, el ejecutivo predeterminado no puede alterar locales.

Python 2's Exception

En Python 2, la declaración execiente de la antigua funcionó de manera diferente. Permitió que las variables locales se modificaran dinámicamente en virtud del manejo especial del compilador del ejecutivo incorporado.

conclusion

la llamada exec en Python 3 requiere una sutil Cambio en el enfoque para modificar las variables locales. Al emplear un diccionario de locales explícito, los desarrolladores pueden aprovechar el poder de la ejecución del código dinámico mientras mantienen el control sobre sus variables locales.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3