当我不使用任何全局变量时,如何更新函数的返回值


def dinner_completed():
counter=0
if counter==0:
k=False
if counter==1:
k=True
counter+=1
print('counter',counter)
return k

while not dinner_completed():
print('1')

每次在while循环中检查函数时,计数器都会初始化为0。我不想使用全局变量,我的函数必须只返回一次False,其余时间都返回True。

正如注释中所建议的,您可以使用生成器来避免使用全局变量。您需要这样做,因为正如您所指出的,每次调用dinner_completed()时,计数器变量都设置为0。以下是使用生成器的示例:

def dinner_completed():
yield False
while True:
yield True
check = dinner_completed()
while not next(check):
print('1')

正如您所问的,dinner_completed()函数仅第一次返回False,其他所有时间都返回True。如果你想设置一个不同的阈值,你可以使用以下代码:

def dinner_completed():
n = 0
threshold = 1
while n < threshold:
yield False
n += 1
while True:
yield True
check = dinner_completed()
while not next(check):
print('1')

最后一个解决方案,如在重复答案中所述,您可以声明一个静态变量。我已经用if __name__ == '__main__来证明这不是一个全局变量:

def dinner_completed():
if dinner_completed.counter==0:
k=False
if dinner_completed.counter==1:
k=True
dinner_completed.counter+=1
print('counter',dinner_completed.counter)
return k
if __name__ == '__main__':
dinner_completed.counter = 0 
while not dinner_completed():
print('1')

我不确定你想要什么,但我想你可以看看这个吗?

def dinner_completed(counter):
return False if counter == 0 else True

因为这个:

def dinner_completed():
counter=0
...

每次输入函数时,都会将计数器初始化为0。如果您不想创建全局变量,可以将计数器作为函数的参数发送

def dinner_completed(counter):

但全局变量并不像你想象的那样是真正的大敌人,它们可能是非常有用的

最新更新