【问题标题】:Why does the exec() function work differently inside and outside of a function? [duplicate]为什么 exec() 函数在函数内部和外部的工作方式不同? [复制]
【发布时间】:2021-12-05 13:48:08
【问题描述】:

我的问题与以下代码示例有关:示例 1 工作正常,而示例 2 失败。

# example 1
string_one = 'greeting_one = "hello"'
exec(string_one)

print(greeting_one)
# example 2
def example_function():
    
    string_two = 'greeting_two = "hi"'
    exec(string_two)
    
    print(greeting_two)

example_function()

示例 1 在全局范围内创建变量,示例 2 应在本地范围内创建变量,否则这两个应该相同 (?)。相反,示例 2 给出了以下错误:name 'greeting_two' is not defined。为什么 exec() 没有像示例 2 中那样缩进?

【问题讨论】:

  • docs 向您发出警告:“注意:默认本地变量的行为与以下函数 locals() 的描述相同:不应尝试修改默认的本地字典。”
  • 感谢您的回复。我现在首先将 greeting_two 设为全局变量,但错误仍然存​​在。有没有办法获得与示例 2 中的示例 1 相同的行为?

标签: python function scope global-variables local-variables


【解决方案1】:

将当前本地范围传递给函数并将其用作exec() 的本地字典。

# example 2
def example_function(loc):
    string_two = 'greeting_two = "hi"'
    exec(string_two, loc)
    print(greeting_two) 

example_function(locals())

Read more here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2021-09-16
    相关资源
    最近更新 更多