"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > `ExEc ()` atualiza variáveis ​​locais no Python 3 e, se não, como isso pode ser feito?

`ExEc ()` atualiza variáveis ​​locais no Python 3 e, se não, como isso pode ser feito?

Postado em 2025-02-19
Navegar:681

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

Impacto do EXEC nas variáveis ​​locais: um mergulho em

A função Exec, um grampo de python para execução de código dinâmico, apresenta uma dúvida intrigante: Ele pode atualizar variáveis ​​locais dentro de uma função?

o python 3 Dilemma

No Python 3, o seguinte snippet de código falha ao atualizar uma variável local como se poderia esperar:

def f():
    a = 1
    exec("a = 3")
    print(a)

em vez do '3' antecipado, ele impressa assustador O mesmo código no Python 2 realmente atualizaria a variável local, imprimindo '3'. Essa disparidade surge de uma mudança fundamental na maneira como o Python lida com variáveis ​​locais. no momento da compilação. Essa eficiência tem o custo de proibir modificações no tempo de execução para os habitantes locais. Assim, a chamada executiva padrão no Python 3 não pode alterar com sucesso as variáveis ​​locais. Passe explicitamente um dicionário local para exec. Este dicionário armazenará as variáveis ​​locais atualizadas após a execução do código dinâmico. O código revisado se parece com o seguinte:

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

implicações para Exec ()

A documentação do Python 3 mede explicitamente contra a modificação do dicionário padrão () ao usar o Exec, pois pode levar a levar a levar a comportamento imprevisível. Para segurança, deve -se sempre passar por um dicionário local explícito para executar ao pretender atualizar variáveis ​​locais. O relatório de bug destaca que a otimização do Python 3 para variáveis ​​locais levou ao comportamento atual. O compilador, incapaz de distinguir funções executivas personalizadas do próprio Python, não pode oferecer a eles tratamento especial. Portanto, o EXEC padrão não pode alterar os locais. Ele permitiu que as variáveis ​​locais fossem modificadas dinamicamente em virtude do manuseio especial do compilador do exec. Mudança na abordagem para modificar variáveis ​​locais. Ao empregar um dicionário local explícito, os desenvolvedores podem alavancar o poder da execução de código dinâmico, mantendo o controle sobre suas variáveis ​​locais.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3