gpt4 book ai didi

python-3.x - 在嵌套在 Python 中的函数中的函数内使用全局变量

转载 作者:行者123 更新时间:2023-12-04 12:17:38 24 4
gpt4 key购买 nike

我想知道为什么我的代码不起作用。我预计它会返回 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() 的周围环境中出现和定义 --inside f()-- 为什么我会收到此错误消息?

最佳答案

错误是因为您试图增加全局 counter 的值当它还没有被赋值时。专柜在f()函数在不同的范围和不同的变量然后你的全局 counterf1()功能。

您必须指定 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()

关于python-3.x - 在嵌套在 Python 中的函数中的函数内使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com