首页 > 解决方案 > 是否有一种干净的方法可以仅在第一次迭代时或在执行之前检查循环内的变量?

问题描述

我的代码是用 Python 编写的,但这个问题适用于任何编程语言。

基本上,我有一个结构类似于此的循环:

while True:
    if visual:
        print("Something meaningful")
    function1()
    function2()

可视变量由用户在使用 CLI 参数调用脚本时确定,它是一个布尔值。基本上,如果设置为 True,用户会获得视觉反馈,如果设置为 False,他不会。

问题是循环将在每次迭代时检查该变量,从而稍微减慢执行速度。

因此,我想知道是否有一种干净的方法可以避免在每次迭代时检查“visual”是否为 True,以某种方式告诉程序仅在第一次迭代时检查该变量,因为该变量在执行过程中无法更改。

我想过做这样的事情:

if visual:       
    while True:
        print("Something meaningful")
        function1()
        function2()
else:
    while True:
        function1()
        function2()

它有效,但它似乎根本不是一个好的做法。

解决这个问题的最干净的方法是什么?

标签: pythonalgorithmloopsif-statementwhile-loop

解决方案


我将从将while循环中的函数分组到一个新函数中开始。然后在循环之前我们检查是否visual为真,如果是,那么我们用一个wrapper装饰functions()

def functions():
    function1()
    function2()

def _visual_decorator(func):
    def _wrapper(*args, **kwargs):
        print("Something meaningful")
        return func(*args, **kwargs)
    return _wrapper

if visual:
    functions = _visual_decorator(functions)

while True:
    functions()

完整的工作示例


推荐阅读