为什么 exec() 函数在函数内部和外部的工作方式不同?

Why does the exec() function work differently inside and outside of a function?

我的问题与以下代码示例有关:示例 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 中的缩进那样工作?

将当前局部作用域传递给函数并将其用作 exec() 的局部字典。

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

example_function(locals())