# else語句
# `else`從句
`for`循環還有一個`else`從句,我們大多數人并不熟悉。這個`else`從句會在循環正常結束時執行。這意味著,循環沒有遇到任何`break`. 一旦你掌握了何時何地使用它,它真的會非常有用。我自己對它真是相見恨晚。
有個常見的構造是跑一個循環,并查找一個元素。如果這個元素被找到了,我們使用`break`來中斷這個循環。有兩個場景會讓循環停下來。
- 第一個是當一個元素被找到,`break`被觸發。
- 第二個場景是循環結束。
現在我們也許想知道其中哪一個,才是導致循環完成的原因。一個方法是先設置一個標記,然后在循環結束時打上標記。另一個是使用`else`從句。
這就是`for/else`循環的基本結構:
~~~
for item in container:
if search_something(item):
# Found it!
process(item)
break
else:
# Didn't find anything..
not_found_in_container()
~~~
考慮下這個簡單的案例,它是我從官方文檔里拿來的:
~~~
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n/x)
break
~~~
它會找出2到10之間的數字的因子。現在是趣味環節了。我們可以加上一個附加的else語句塊,來抓住質數,并且告訴我們:
~~~
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print( n, 'equals', x, '*', n/x)
break
else:
# loop fell through without finding a factor
print(n, 'is a prime number')
~~~
- 簡介
- 序
- 譯后感
- 原作者前言
- *args 和 **kwargs
- *args 的用法
- **kwargs 的用法
- 使用 *args 和 **kwargs 來調用函數
- 啥時候使用它們
- 調試 Debugging
- 生成器 Generators
- 可迭代對象(Iterable)
- 迭代器(Iterator)
- 迭代(Iteration)
- 生成器(Generators)
- Map和Filter
- Map
- Filter
- set 數據結構
- 三元運算符
- 裝飾器
- 一切皆對象
- 在函數中定義函數
- 從函數中返回函數
- 將函數作為參數傳給另一個函數
- 你的第一個裝飾器
- 使用場景
- 授權
- 日志
- 帶參數的裝飾器
- 在函數中嵌入裝飾器
- 裝飾器類
- Global和Return
- 多個return值
- 對象變動 Mutation
- slots魔法
- 虛擬環境
- 容器 Collections
- 枚舉 Enumerate
- 對象自省
- dir
- type和id
- inspect模塊
- 推導式 Comprehension
- 列表推導式
- 字典推導式
- 集合推導式
- 異常
- 處理多個異常
- finally從句
- try/else從句
- lambda表達式
- 一行式
- For - Else
- else語句
- open函數
- 目標Python2+3
- 協程
- 函數緩存
- Python 3.2+
- Python 2+
- 上下文管理器
- 基于類的實現
- 處理異常
- 基于生成器的實現