提问人:Christian 提问时间:8/11/2021 最后编辑:Paul M.Christian 更新时间:8/11/2021 访问量:31
在局部函数作用域中使用的全局语句 [duplicate]
Global statements used within a local function scope [duplicate]
问:
虽然我完全了解 LEGB 规则是如何工作的,但直到我遇到这个。从本质上讲,我将访问我的函数本地命名空间中的“total”变量。我知道“total 变量是一个本地命名空间,但无论出于何种原因,当我尝试运行此函数时,我都会收到以下错误: UnboundLocalError:赋值前引用的局部变量“total”
例:
total = 0
def two_digit_sum(n):
for i in str(n):
total += int(i)
return total
number = 111
print(two_digit_sum(number))
但是,当我使用以下功能时,我没有遇到错误 例:
def spam():
print(eggs)
eggs = 42
spam()
^^^ 正如你所看到的,eggs 变量也是一个全局函数。
答:
0赞
Ali Saad
8/11/2021
#1
我认为你所做的是你已经为函数内部提供了值,所以你必须把它变成一个.total
global variable
但是在鸡蛋中,您没有做任何新值,只是打印了它。
此代码是您的问题的解决方案。
total = 0
def two_digit_sum(n):
global total
for i in str(n):
total += int(i)
return total
number = 111
print(two_digit_sum(number))
但是,如果您在函数内部给出了值,则会出现错误。eggs
spam
def spam():
eggs += 1
print(eggs)
eggs = 42
spam()
在这里,您已经为它创造了价值。
评论
total
eggs
total = 0
total += 0
total = 0
total