代码之家  ›  专栏  ›  技术社区  ›  ck1987pd

python中检查循环是否未执行的最佳方法

  •  0
  • ck1987pd  · 技术社区  · 3 年前

    标题可能有误导性,所以这里有一个更好的解释。

    考虑下面的代码:

    def minimum_working_environment(r):
        trial=np.arange(0,6)[::-1]
        for i in range(len(trial)):
            if r>trial[i]:
                return i
        return len(trial)
    

    我们看到如果 r 比…的最小元素小 trial 这个 if 循环中的子句永远不会执行。因此,函数从不在循环中返回任何内容,而是在最后一行返回某些内容。如果 如果 循环中的子句被执行, return 终止代码,因此最后一行永远不会执行。

    我想实现类似的东西,但没有回报,即。,

    def minimum_working_environment(self,r):
        self.trial=np.arange(0,6)[::-1]
        for i in range(len(self.trial)):
            if r>trial[i]:
                self.some_aspect=i
                break
        self.some_aspect=len(self.trial)
    

    在这里 break 中断循环,但函数未终止。

    我能想到的解决方案是:

    • 代替 打破 具有 return 0 并且不检查函数的返回值。
    • 使用标志变量。
    • 扩展 self.trial 带有非常小的负数的数组,如 -1e99 .

    第一种方法看起来不错,如果我没有得到任何答案,我可能会实现它。第二个很无聊。第三个问题不仅无聊,而且可能会导致性能问题。

    我的问题是:

    有这样一个保留的词吗 回来 这将以我想要的方式工作,即终止函数?

    如果没有,最好的解决方案是什么?

    谢谢

    1 回复  |  直到 3 年前
        1
  •  1
  •   Grismar    3 年前

    你可以查一下 for 循环没有遇到错误 break 具有 else ,这似乎就是你想要的。

    import numpy as np
    
    
    def minimum_working_environment(r):
        trial = np.arange(0, 6)[::-1]
        for i in range(len(trial)):
            if r > trial[i]:
                return i
        return len(trial)
    
    
    def alternative(r):
        trial = np.arange(0, 6)[::-1]
        for i in range(len(trial)):
            if r > trial[i]:
                break
        else:
            i = len(trial)
        return i
    
    
    print(minimum_working_environment(3))
    print(minimum_working_environment(-3))
    
    print(alternative(3))
    print(alternative(-3))
    

    结果:

    3
    6
    3
    6
    

    这是因为循环控制变量 i 仍将具有循环中在 打破 还有 其他的 只有在 打破 从不执行。

    但是,如果您只想终止一个函数,那么应该使用 return 。如果您确实需要知道循环是否完全完成(即没有中断),或者循环是否提前终止,则我提供的示例非常有用。它适用于你的例子,我想这正是一个例子。