在Python中的函数中嵌套的函数中使用全局变量



我想知道为什么我的代码不能工作。我原以为它会返回11,结果却创建了一个异常:

def f():
counter = 1
def f1():
global counter
counter += 1
while True:
f1()
if counter>10:
return(counter)
f()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-219-0ec059b9bfe1> in <module>()
----> 1 f()
<ipython-input-218-50c23b042204> in f()
9         counter += 1
10 
---> 11     f1()
12 
13     if counter>10:
<ipython-input-218-50c23b042204> in f1()
7         global counter
8 
----> 9         counter += 1
10 
11     f1()
NameError: name 'counter' is not defined

既然counter被声明为全局变量,并且它出现并定义在f1((的周围环境中——在f((内部——为什么我会收到这个错误消息?

错误是因为您试图在全局counter尚未给定值的情况下增加其值。f()函数中的计数器与f1()函数中的全局counter位于不同的范围和变量中。

您必须为将在中使用此全局变量的每个作用域指定global counter。因此,这样做应该可以解决您的问题:

def f():
global counter
counter = 1
def f1():
global counter
counter += 1
f1()
if counter > 10:
return(counter)
f()

我还建议避免在没有充分理由的情况下在函数中声明函数,也不要使用全局变量,因为这会使程序复杂化。最好将counter作为参数传递给函数并返回结果。

不使用全局或嵌套函数的示例:

def f():
counter = 1
result = f1(counter)
if result > 10:
return(result)
def f1(argument):
argument += 1
return argument
f()

它不是全局变量。在全球范围内,它并不存在。使用nonlocal而不是global

相关内容

  • 没有找到相关文章

最新更新