我正在通过使用 Python 自动化无聊的东西来学习 Python。第 3 章讨论了函数和作用域等。它指出局部作用域可以使用全局作用域。但是,用下面的示例代码,它不是真的?
示例代码:
def spam():
print(eggs) #Error!
eggs = 'spam local'
eggs = 'global'
spam()
我从逻辑上理解,因为在我们执行打印之前,鸡蛋还没有被赋值,这正是书中所说的。但我的问题是,鸡蛋已在全局范围内分配了一个值。为什么 Python 不恢复到全局范围来拉变量。再说一次,local可以调用/pull global而不能调用其他local,但是global不能pull local。
干杯。
答案 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
这些有意义吗?