从for循环中返回

8 投票
6 回答
5197 浏览
提问于 2025-04-15 19:55

我刚学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)

撰写回答