Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数中的函数-全局和非局部作用域_Python_Python 3.x - Fatal编程技术网

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
的名称空间。