python - 当我不使用任何全局变量时如何更新函数的返回值?
问题描述
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。
解决方案
正如评论中所建议的,您可以使用生成器来避免使用全局变量。您需要这个,因为正如您所指出的,每次调用时,计数器变量都设置为 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')
推荐阅读
- angular - 无法读取未定义的属性“ ”
- git - 如何在git中有当前文件但没有文件历史记录?
- vb.net - 如何添加datagridview行
- unix - 像 Charybdis 这样的 irc 守护进程是如何工作的?
- javascript - 如果变量为空,则阻止提交
- sqlite - Go sqlite 无法在 mac osx 上构建/编译
- angular - Ionic4 - 如何在中心对齐警报按钮?
- node.js - 给定特定大小时,node-fluent-ffmpeg 无法正确调整视频大小
- python - 当输入非整数值时,如何防止我的程序终止?
- c++ - 将子类 Y 推入 std::stack 后无法使用它的方法
(C++)