PythonCN

V1

2022/05/19阅读:20主题:橙心

【Python 技巧】“for”(和“while”)循环可以有一个“else”分支

# Python 的`for` 和`while` 循环支持`else` 子句,
# 该子句仅在循环终止而没有遇到`break` 语句时才执行。

def contains(haystack, needle):
    """
    Throw a ValueError if `needle` not
    in `haystack`.
    """

    for item in haystack:
        if item == needle:
            break
    else:
        # The `else` here is a
        # "completion clause" that runs
        # only if the loop ran to completion
        # without hitting a `break` statement.
        raise ValueError('Needle not found')


>>> contains([23'needle'0xbadc0ffee], 'needle')
None

>>> contains([23420xbadc0ffee], 'needle')
ValueError: "Needle not found"


# 就我个人而言,我不喜欢循环中的`else`“完成子句”,因为我觉得它令人困惑。 
# 我宁愿做这样的事情:

def better_contains(haystack, needle):
    for item in haystack:
        if item == needle:
            return
    raise ValueError('Needle not found')

# 注意:通常你会写这样的东西来做一个会员测试,这更像 Pythonic:
if needle not in haystack:
    raise ValueError('Needle not found')
关注PythonCN.png
关注PythonCN.png

分类:

后端

标签:

Python

作者介绍

PythonCN
V1