python可迭代物件 迭代器 生成器

2022-08-24 22:39:11 字數 2043 閱讀 4864

乙個擁有__iter__方法的物件,可以使用for迴圈遍歷

可迭代物件有:strlisttupledictsetiteratorgeneratorfile

# 判斷乙個物件是否可迭代

>>> from collections import iterable

>>> isinstance('abc', iterable)

true

>>> isinstance(100, iterable)

false

>>> from collections import iterator

>>> isinstance([1,2], iterator) # 列表不是迭代器

false

>>> isinstance((1,2), iterator)

false

>>> isinstance([i for i in range(10)], iterator)

false

>>> isinstance((i for i in range(10)), iterator)

true

>>> a = (i for i in range(3))

>>> next(a)

0>>> next(a)

1>>> next(a)

traceback (most recent call last):

file "", line 1, in nameerror: name 'a' is not defined

>>> f = open('1.txt')

>>> isinstance(f, iterator) # 檔案是可迭代物件、也是迭代器

>>> true

# list、dict、str等雖然是可迭代物件,但不是迭代器,可以使用iter()函式轉化

>>> isinstance('abc', iterator)

false

>>> isinstance(iter('abc'), iterator)

true

for迴圈遍歷iterable的本質: 通過iter()函式獲取iterable的迭代器,然後對獲取到的迭代器不斷呼叫next()函式獲取下乙個值,當遇到stopiteration的異常時迴圈結束

把乙個列表生成式的中括號改為()

帶有yield的函式

>>> li = [i for i in range(10)]  # 列表生成式

>>> li

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> gen = (i for i in range(10)) # 迭代器

>>> gen

at 0x00000161109100f8>

>>> next(gen)

0>>> next(gen)

1

實現斐波那契數列

def fib(max):

a, b, n = 0, 1, 0 # n表示數列的長度

while n < max:

# a, b =b, a+b

t = a + b

a = b

b = t

n += 1

yield a

num = fib(4)

print(next(num)) # 1

print(next(num)) # 1

print(next(num)) # 2

print(next(num)) # 3

print(next(num)) # stopiteration error

PYTHON 迭代器 可迭代物件

通過重複執行的 處理相似的資料集的過程,並且本次迭代的處理資料要依賴上一次的結果繼續往下做,上一次產生的結果為下一次產生結果的初始狀態,如果中途有任何停頓,都不能算是迭代。1 非迭代例子 loop 0 while loop 3 print hello world loop 1 2 迭代例子 loop...

python迭代 可迭代物件與迭代器物件

問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...

迭代器 可迭代物件 迭代器物件

今天的學習內容有 迭代器 可迭代物件 迭代器物件 for迴圈內部原理 生成器和生成器表示式 面向過程程式設計 迭代就是指更新換代的過程,要重複進行,而且每次的迭代都必須基於上一次的結果。我們使用for迴圈的時候就是把元素從容器裡乙個個取出來,這種過程其實就是迭代。迭代器 迭代取值的工具。迭代器的作用...