python迭代器一般包含 python 迭代器

2021-10-13 07:50:05 字數 2170 閱讀 9803

可迭代物件:

什麼是可以直接用於for迴圈的呢?

可以直接用於for的資料型別一般分為兩種:

1.集合資料型別:

list、tuple、dict、set、string…

2.generator,包括生成器和帶yield的generator function

如何判斷乙個物件是否是可迭代物件?

答:isinstance()

isinstance()函式判斷乙個物件是否是乙個已知的型別

語法:isinstance(object,classinfo)

(1)object—>例項物件

(2)classinfo—>可以是直接或間接類名、基本型別或者由它們組成的

元組返回值。如果物件型別與classinfo的型別相同則返回true,否則返回false。

在這裡面,首先我匯入的iterable的包,也就是可迭代物件,下面的四條語句是分別檢視

列表、元組、字典、字串的型別,可以看到他們四個都是可迭代物件,當然,可迭代

物件遠不止這些,這裡只是給大家乙個概念,並且看一下isinstance的使用方法。

如果你還不能理解的話,可以想一下,你有沒有寫過這樣一句話(for i in [1,2,3,4,5]),

這是乙個迴圈的表示方法,這裡面就是在迴圈列表中的元素,來實現內部語句塊。

也可以說成是遍歷這個列表,當然也就是迭代了。

生成器也是可迭代物件。

而生成器不但可以作用於for迴圈,還可以被next()函式不斷呼叫並返回下乙個值,直到最後丟擲stopiteration錯誤表示無法繼續返回下乙個值了。

可以使用isinstance()判斷乙個物件是否是iterator物件:

生成器都是iterator物件,但list、dict、str雖然是iterable,卻不是iterator。

把list、dict、str等iterable變成iterator可以使用iter()函式:

為什麼list、dict、str等資料型別不是iterator?

這是因為python的iterator物件表示的是乙個資料流,iterator物件可以被next()函式呼叫並不

斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是

乙個有序數列,但我們卻不能提前知道序列的長度,只有不斷通過next()函式實現按需要計算下乙個資料,所以iterator的計算是惰性的 ,只有在需要時返回下乙個資料時它才會計算。

iterator甚至可以表示乙個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。

小結:1.凡是可作用於for迴圈的物件都是iterable型別;

2.凡是可作用於next()函式物件都是iterator型別,它們表示乙個惰性計算的序列。

3.即:

迭代器與可迭代

可迭代(可以for遍歷)

迭代器(有next方法)

4.集合資料型別如list、dict、str等是iterable但不是iterator,不過可以通過iter()函式獲得乙個iterator物件。

5.python的for迴圈本質上就是通過不斷呼叫next()函式實現的,例如:

for x in [1,2,3,4,5]:

pass

等價於:

#首先獲得iterator物件

info = iter([1,2,3,4,5]]

while true:

x = next(info)#獲得下乙個值

6.關係舉例:

from collections.abc import iterator,iterable

temp = (x*x for x in range(5))

print(temp,type(temp))

print(isinstance(temp,iterator))

print(isinstance(temp,iterable))

print(next(temp))

for i in temp:

print(i)

info = [1,2,3,4,5,6]

print(isinstance(info,iterable))

print(isinstance(info,iterator))

info = iter(info)

print(isinstance(info,iterator))

python迭代器一般包含 python 迭代器

from collections import iterable from collections import iterator 可迭代物件 可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 可以用isinstance 去判斷乙個物件是否是iterable物件 可以直接作用於for...

python中的 迭代器(如同遍歷一般理解)

如同遍歷一般,這樣理解起來可以發現不是特別的繞,剛開始的時候我覺得這個迭代特別的不好理解,概念看來好幾遍,還是一頭蒙。突然發現把迭代這兩詞換成遍歷這之後,思路一下就開啟了!先一步一步的來了解吧 使用for迴圈遍歷取值的過程叫做迭代,比如 使用for迴圈遍歷列表獲取值的過程。for value in ...

python爬蟲一般格式

伴隨bs4安裝的還有 lxml 模組 需要了解python正規表示式 主要了解re.findall函式的使用。簡單示例 一般爬蟲的格式如下 import re import time import random import requests from bs4 import beautifulsou...