# 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([23, 42, 0xbadc0ffee], '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')
【【Python 技巧】“for”(和“while”)循环可以有一个“else”分支】
文章图片
推荐阅读
- 《告别Bug》|成功解决(AttributeError: ‘DataFrame‘ object has no attribute ‘ix‘)
- python|python编写程序,解决“百钱百鸡”问题【简单易懂,程序可以直接运行】
- Python|Python 实现百钱买百鸡问题(试使用列表推导式解决该问题)
- Django,Flask和Redis教程(Python框架之间的Web应用程序会话管理)
- 人工智能|31个Python实战项目教你掌握图像处理,PDF开放下载
- Python|Python实战项目(为人脸照片添加口罩)
- python|python中matplotlib的颜色及线条类型
- 如何使用Tornado创建一个简单的Python WebSocket服务器
- 使用Bottle框架构建Rest API