函数内部的函数 - 全局和非局部范围

时间:2014-03-22 23:21:09

标签: 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)

但为什么我不能使用全局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)

2 个答案:

答案 0 :(得分:1)

您需要在使用它的每个函数中将变量标记为全局变量(或者更确切地说,指定给它的每个函数)。您在n中将countdown标记为全球,但decrement仍认为它是本地的。如果您希望decrement也使用全局n,则需要在global n内放置另一个decrement

答案 1 :(得分:1)

全局声明不会自动应用于嵌套函数。你需要另一个声明:

def decrement():
    global n
    n -= 1

因此n中的decrement也指全局变量。