可迭代物件:
什麼是可以直接用於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...