Python:迭代器
在Python中,迭代器是一個很重要的東西。良好的迭代器定義,能讓程式碼更加清晰。
定義一個迭代器需要實現兩個方法__iter__
和__next__
。
__iter__
返回迭代器物件本身。它是必需的,以允許容器和迭代器在for .. in ..
語句中使用。__next__
返回下一個元素。當沒有元素可返回時,應丟擲StopIteration
。
class X2:
def __init__(self, n: int):
self.list = [x*x for x in range(n)]
self.__count = -1
def __iter__(self):
return self
def __next__(self):
self.__count += 1
try:
return self.list[self.__count]
except IndexError:
raise StopIteration
if __name__ == "__main__":
for each in X2(10):
print(each)
但這樣定義似乎有些太麻煩了,Python提供了一個更加簡略的方法:
def X2(n: int):
for i in range(n):
yield i*i
if __name__ == "__main__":
for each in X2(10):
print(each)
事實上,如下程式碼
for each in X2(10):
print(each)
與
t = X2(10)
while True:
try:
each = t.__next__()
except StopIteration:
break
print(each)
是等價的。
能看出,for .. in ..
的執行機制,就是不斷地呼叫被迭代物件的.__next__()
方法,直到捕獲到StopIteration
異常。
明白了這一點,很容易就能知道,Python的死迴圈寫法至少有兩種:while True:
和使用for .. in ..
迭代一個擁有__iter__
和__next__
方法的物件,並且這個物件的__next__
方法永遠不會丟擲StopIteration
異常。
附:
next(g)
和g.__next__()
都是呼叫了g
的__next__()
方法,只不過next(g)
可能看起來更友好一點。
相關文章
- Python 迭代器Python
- Python迭代器Python
- Python進階:迭代器與迭代器切片Python
- Python可迭代的物件與迭代器Python物件
- python中的迭代器Python
- 深度理解Python迭代器Python
- Python之可迭代物件、迭代器、生成器Python物件
- Python 擴充之迭代器Python
- Python學習迭代器(Iterator)Python
- Python Rust 迭代器對比PythonRust
- python 生成器&迭代器Python
- python迭代器是什麼Python
- Python迭代器與生成器Python
- Python3 迭代器深入解析Python
- Python——迭代器的高階用法Python
- python_August(迭代器、生成式)Python
- Python中迭代器的實現Python
- Python 函式進階-迭代器Python函式
- 迭代器模式大幅提升Python效能模式Python
- Python迭代器&生成器&裝飾器Python
- 搞清楚 Python 的迭代器、可迭代物件、生成器Python物件
- python_裝飾器——迭代器——生成器Python
- Python語法—迭代器、生成器Python
- 1.5.4 Python迭代器和生成器Python
- Python基礎(08):迭代器和解析Python
- Python學習之迭代器協議Python協議
- Python之裝飾器、迭代器和生成器Python
- 史上最全 Python 迭代器與生成器Python
- python3.7 迭代器和生成器Python
- python迭代器 想說懂你不容易Python
- 關於python中可迭代物件和迭代器的一些理解Python物件
- 《python-美藏篇》1.可迭代、迭代器與生成器Python
- 迭代器
- 草根學Python(七) 迭代器和生成器Python
- Python基礎(四)——迭代器/物件,生成器Python物件
- python迭代器和生成器的總結Python
- Python中可迭代物件、迭代器以及iter()函式的兩個用法詳解Python物件函式
- 詳解python三大器——迭代器、生成器、裝飾器Python
- TypeScript迭代器TypeScript