从for循环中返回
我刚学Python不久,想问问这个:
def func(self, foo):
for foo in self.list:
if foo.boolfunc(): return True
return False
这样写算不算好习惯。
我能像上面那样在循环中直接返回吗,还是应该用一个像这样的while循环呢?
def func(self, foo):
found = false
while(not found & i < len(self.list)):
found = foo.boolfunc()
++i
return found
我的Java老师警告我们在循环中不要使用break,但这 technically 不是一个break,而且写起来更简洁,所以……嗯。
谢谢!
6 个回答
6
你的教授提倡一种叫做“单一返回点”的做法,这个意思就是任何一段代码应该只有一个退出的地方。循环中的中断和这个有点不同,但通常也会被归为一类。
这是一种颇具争议的观点,至少可以这么说,并不是像“绝对不要使用goto”那样的硬性规则。按照他的方法来做可能是个好主意——这样你既能让他满意,又能看到两种方法的好处。不过,大多数人其实并不会太严格遵循单一返回点的原则,如果这样做能让代码更易读,他们是愿意打破这个规则的。
9
需要提到的是,在Python中,for循环可以有一个else子句。这个else子句只有在循环因为遍历完列表而结束时才会执行。
所以你可以这样写:
def func(self):
for foo in self.list:
if foo.boolfunc():
return True
else:
return False
14
你的例子没有问题,但写成下面这样会更好
def func(self, foo):
return any(foo.boolfunc() for foo in self.list)