为什么可以';t我调用已分配全局变量的局部变量?-python

为什么可以';t我调用已分配全局变量的局部变量?-python,python,Python,我正在用Python学习Python,用Python自动化那些无聊的东西。第三章讨论了函数和作用域等,指出局部作用域可以使用全局作用域。但是,对于下面的示例代码,这不是真的吗 示例代码: def spam(): print(eggs) #Error! eggs = 'spam local' eggs = 'global' spam() 我从逻辑上理解这一点,因为在我们执行print之前,没有给eggs赋值,而这正是书中所说的。但我的问题是,从那以后,鸡蛋在全球范围内被赋予了一

我正在用Python学习Python,用Python自动化那些无聊的东西。第三章讨论了函数和作用域等,指出局部作用域可以使用全局作用域。但是,对于下面的示例代码,这不是真的吗

示例代码:

def spam():
    print(eggs) #Error!
    eggs = 'spam local'

eggs = 'global'
spam()
我从逻辑上理解这一点,因为在我们执行print之前,没有给eggs赋值,而这正是书中所说的。但我的问题是,从那以后,鸡蛋在全球范围内被赋予了一个值。为什么Python不还原到全局范围来提取变量。同样,本地可以调用/拉取全局,但不能调用其他本地,但全局不能拉取本地


干杯。

看看这里的代码

eggs = 'global'
def spam():
    print(eggs) #No Error!
spam()
它没有给我们一个错误。 但假设我们在鸡蛋上做了什么

eggs = 'global'
def spam():
    print(eggs) 
    eggs += " and bacon"#Error!
spam()
我们将得到一个错误。
UnboundLocalError:赋值前引用的局部变量“eggs”
。 这就是为什么我们可以选择将变量作为参数通过函数传递的原因

eggs = 'global'
def spam(eggs):
    print(eggs) 
    eggs += " and bacon"
    return eggs
print(spam(eggs))
输出

global
global and bacon

这有什么意义吗?

FWIW,如果你去掉了
eggs='spam local'
,它将打印全局。课程:将参数传递给你的函数,而不是依赖全局变量。如果你真的对技术细节感兴趣。。。但实际上,我只在0.01%的时间里使用非常量全局变量,所以这在实践中并不是一个真正的问题。对不起,伙计,第一节或第一部分没有提到“这很可能就是为什么我们可以选择通过函数传递变量作为参数。”我明白了所有这些。我甚至读到了我的问题的链接,可能与之类似。Idk,如果我写错了我的问题或其他什么,但我会在这里重新写。我的问题是,如果我们给一个局部状态赋值,那么这些局部状态可以调用全局作用域。为什么上面提到的代码会出现错误?它不应该只调用分配给鸡蛋的全局变量吗?哪个是“全局的”?您的问题已关闭,因为它与此类似。这有用吗?