首页 > 解决方案 > 当我不使用任何全局变量时如何更新函数的返回值?

问题描述

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。

标签: pythonpython-3.x

解决方案


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

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')

推荐阅读