"return" 的位置差异

Difference in placement of "return"

我目前正在学习如何编码,但在使用 return 函数时遇到了问题:

    unionFind = UnionFind(n)
    
    for A, B in edges:
        if not unionFind.union(A, B):
            return False

    return True

当我输入 return True 时没有缩进,我能够得到 False 的结果。但是,如果我对此做同样的事情:

    unionFind = UnionFind(n)
    
    for A, B in edges:
        if not unionFind.union(A, B):
            return False
        return True

我只收到 True。这与以下相同:

    unionFind = UnionFind(n)
    
    for A, B in edges:
        if not unionFind.union(A, B):
            return False
        else:
            return True

我检查了多个在线资源,我似乎无法理解 return 函数在这种情况下的行为方式(是否受 for 循环或 if 条件的影响)并且非常感谢一些指导。谢谢。

这不是 return 语句的行为方式。它是关于代码范围的。 当你在没有缩进的情况下放置语句时,return Truefor 循环范围之外,并且只有在遍历所有 AB 之后才会到达它仅当 not unionFind.union(A, B) 条件不适用于所有夫妇时。

如果将 return True 缩进或放在 else 语句中,它将在 for 范围内到达,这意味着只有前几个AB 将被选中。

希望对您有所帮助。

对于这种情况,您将 return True 放在 for 循环之外。这意味着所有迭代都不能执行 return False 以便它在循环结束后会 return True 。但是,结果是 False,因为至少有一次迭代条件是 True,这使得它在循环结束前 return False

for A, B in edges:
    if not unionFind.union(A, B):
        return False

return True

根据相同的逻辑思维,您将 return 位置更改为

for A, B in edges:
    if not unionFind.union(A, B):
        return False
    return True

for A, B in edges:
    if not unionFind.union(A, B):
        return False
    else:
        return True

for 循环中每次迭代的执行将检查您的if 条件是否为True。如果条件是 True 那么你将到达 return False 并且循环结束。否则,条件不满足,因此程序将改为执行 return True。由于 return 语句,这也使循环结束。请注意,这两种情况将始终只执行其 for 循环的第一次迭代,因为它将 return 立即结束时 TrueFalse 。因此,这两种情况总是得到 return True 的原因是因为第一次迭代不满足条件,从而导致 return True.