python - 变量检查的干净方法+在while循环中继续
问题描述
我有一个相对较大的main()
函数,我需要在函数的不同位置多次检查一个变量,然后决定是否应该continue
相应地循环,如下所示:
def main():
while True:
...
if foo.check():
reset()
continue
...
作为计时员在哪里foo
工作,因此我需要每隔一段时间检查一次。这 3 行在函数中出现大约 3 到 5 次。
我讨厌这有多脏,那么有没有更清洁的方法呢?
解决方案
您没有指定足够的信息。我有两个问题:
- 调用
foo.check()
幂等是否意味着它总是返回相同的值并且没有副作用? - 是否有一条通过代码的路径,您可以在由 continue 语句控制的同一块中到达第 n次调用,而无需先调用第 n-1次出现?
foo.check()
例如,如果答案的答案是肯定的,而第二个问题的答案是否定的,那么您可以删除除第一次调用之外的所有调用,foo.check()
因为返回值很明显False
,否则您将永远无法到达第二次调用。
如果第一个问题的答案是肯定的,第二个问题的答案是肯定的,那么如果调用foo_check()
成本很高,我可能会考虑预先设置:
check_result = foo.check()
然后foo_check()
用check_result
. 但最终你仍然需要做所有的检查。但在所有情况下,您都可以创建一个函数check_and_reset
:
def check_and_reset():
if foo_check():
reset()
return True
return False
然后你的代码变成:
if check_and_reset(): continue
推荐阅读
- google-bigquery - 如何使用 WHERE NOT 过滤掉我的条件
- sql - 在 SQL 中进行多次更新的最高效方式
- c# - 它没有感应到我的 input.getaxis 是否有原因
- colors - 更改任务栏图标的颜色
- node.js - 尽管表单输入已成功传输到后端,为什么 JSON.parse(event.body) 返回 null?(包括代码和日志)
- asp.net-web-api - .Net Framework API 控制器无法识别路由属性
- javascript - 创建分层/缩进下拉列表
- php - 我正在尝试使用此表单来捕获用户详细信息并使用底部的 PHP 脚本将它们加载到 MySQL 表中,但它不起作用
- python - Ansible 是否公开其自动发现的 Python 解释器?
- spring - 如何使用spring mvc使用@RequestParam捕获一些参数?