Python 函数中的函数-全局和非局部作用域
我正在使用全局范围和非局部范围尝试以下代码。下面的代码段没有任何问题Python 函数中的函数-全局和非局部作用域,python,python-3.x,Python,Python 3.x,我正在使用全局范围和非局部范围尝试以下代码。下面的代码段没有任何问题 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) 但是为什么
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)您需要在使用变量的每个函数中(或者更确切地说,在分配给它的每个函数中)将变量标记为全局变量。您在
倒计时
中将n
标记为全局,但递减
仍认为它是局部的。如果希望减量
也使用全局n
,则需要在减量内放置另一个全局n
,全局声明不会自动应用于嵌套函数。您需要另一份声明:
def decrement():
global n
n -= 1
因此n
中的decrement
也引用全局变量。python2版本的countdown
不允许激活多个倒计时。将n
替换为display.n
可能是一个更好的主意。这样,您就不需要全局变量,display
内部函数的dict充当可变局部n
的名称空间。