python 中检查循环是否未执行的最佳方法
Best way in python to check if a loop is not executed
标题可能会产生误导,所以这里有一个更好的解释。
考虑以下代码:
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
子句永远不会执行。因此,该函数从不在循环中 returns 任何东西,而在最后一行 returns 任何东西。如果循环内的 if
子句被执行,return
终止代码,所以最后一行永远不会被执行。
我想实现类似的东西,但没有 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
中断循环但函数未终止。
我能想到的解决办法是:
- 将
break
替换为return 0
并且不检查函数的return值。
- 使用标志变量。
- 用一个非常小的负数扩展
self.trial
数组,例如 -1e99
。
第一种方法看起来不错,如果没有得到任何答案,我可能会实施它。第二个很无聊。第三个不仅无聊,而且可能会导致性能问题。
我的问题是:
是否有像 return
这样的保留字可以按照我想要的方式工作,即终止函数?
如果不是,最好的解决方案是什么?
谢谢!
您可以检查 for
循环没有 运行 进入带有 else
的 break
,这似乎是您想要的。
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
仍将具有它在 break
之后循环中的最后一个值,并且 else
仅在 break
从不执行。
然而,如果你只是想终止一个函数,你应该使用return
。如果您确实需要知道循环是否完全完成(即没有中断)或者它是否提前终止,我提供的示例主要有用。它适用于您的示例,我认为正是这样,只是一个示例。
标题可能会产生误导,所以这里有一个更好的解释。
考虑以下代码:
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
子句永远不会执行。因此,该函数从不在循环中 returns 任何东西,而在最后一行 returns 任何东西。如果循环内的 if
子句被执行,return
终止代码,所以最后一行永远不会被执行。
我想实现类似的东西,但没有 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
中断循环但函数未终止。
我能想到的解决办法是:
- 将
break
替换为return 0
并且不检查函数的return值。 - 使用标志变量。
- 用一个非常小的负数扩展
self.trial
数组,例如-1e99
。
第一种方法看起来不错,如果没有得到任何答案,我可能会实施它。第二个很无聊。第三个不仅无聊,而且可能会导致性能问题。
我的问题是:
是否有像 return
这样的保留字可以按照我想要的方式工作,即终止函数?
如果不是,最好的解决方案是什么?
谢谢!
您可以检查 for
循环没有 运行 进入带有 else
的 break
,这似乎是您想要的。
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
仍将具有它在 break
之后循环中的最后一个值,并且 else
仅在 break
从不执行。
然而,如果你只是想终止一个函数,你应该使用return
。如果您确实需要知道循环是否完全完成(即没有中断)或者它是否提前终止,我提供的示例主要有用。它适用于您的示例,我认为正是这样,只是一个示例。