我正在尝试使用全局和非本地范围的以下代码。以下代码片段可以解决任何问题。
def countdown(start):
n = start
def display():
print('--> %d' % n)
def decrement():
nonlocal n ##using python3
n -= 1
while n > 0:
display()
decrement()
countdown(10)
倒计时(10)
但为什么我不能使用全局n?而不是非本地的。这给了我
UnboundLocalError: local variable 'n' referenced before assignment
这是片段
def countdown(start):
global n ##defined it global
n = start
def display():
print('--> %d' % n)
def decrement():
##no nonlocal varibale here
n -= 1
while n > 0:
display()
decrement()
倒计时(10)
答案 0 :(得分:1)
您需要在使用它的每个函数中将变量标记为全局变量(或者更确切地说,指定给它的每个函数)。您在n
中将countdown
标记为全球,但decrement
仍认为它是本地的。如果您希望decrement
也使用全局n
,则需要在global n
内放置另一个decrement
。
答案 1 :(得分:1)
全局声明不会自动应用于嵌套函数。你需要另一个声明:
def decrement():
global n
n -= 1
因此n
中的decrement
也指全局变量。