为什么我不能调用已分配全局变量的局部变量? - 蟒蛇

时间:2021-05-07 01:27:20

标签: python

我正在通过使用 Python 自动化无聊的东西来学习 Python。第 3 章讨论了函数和作用域等。它指出局部作用域可以使用全局作用域。但是,用下面的示例代码,它不是真的?

示例代码:

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

eggs = 'global'
spam()

我从逻辑上理解,因为在我们执行打印之前,鸡蛋还没有被赋值,这正是书中所说的。但我的问题是,鸡蛋已在全局范围内分配了一个值。为什么 Python 不恢复到全局范围来拉变量。再说一次,local可以调用/pull global而不能调用其他local,但是global不能pull local。

干杯。

1 个答案:

答案 0 :(得分:1)

在此处查看此代码。

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

它不会给我们一个错误。 但是假设我们在鸡蛋上预制了一些东西。

eggs = 'global'
def spam():
    print(eggs) 
    eggs += " and bacon"#Error!
spam()

我们将得到一个错误。UnboundLocalError: local variable 'eggs' referenced before assignment。 这很可能是我们可以选择将变量作为参数通过函数传递的原因。

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

输出

global
global and bacon

这些有意义吗?