python 迭代器和生成器

2022-08-26 02:48:06 字數 1595 閱讀 3785

一、迭代器

1、迭代器iterator中只能包含可迭代物件。可用於for迴圈的物件是可迭代物件iterable,如list,tuple等,可迭代物件不能用__next__()訪問元素

2、能用於for迴圈,且能通過__next__()訪問的物件是迭代器iterator,如生成器就是乙個迭代器物件

3、只能通過__next__()依次獲取迭代器中的元素,不能通過下標才查詢

4、讀取量很大的資料時,用迭代器可節省記憶體

>>> a=iter([1,2,3,4])

>>> b=iter((5,6,7,8))

>>> a.__next__()1

>>> a.__next__()2

>>> b.__next__()5

>>> b.__next__

()6

4、判斷乙個物件是否為可迭代物件 和 迭代器物件

>>> from collections import

iterable

>>> from collections import

iterator

>>> list1 = [1,2,3,4] #

list1是乙個可迭代物件

>>> a = iter(list1) #

將list轉化為迭代器物件

>>>isinstance(list1,iterable)

true

>>>isinstance(list1,iterator)

false

>>>isinstance(a,iterator)

true

>>> isinstance(a,iterable) #

迭代器物件一定是可迭代物件

true

>>> b = list(a) #

將迭代器物件轉化為list

>>>b

[1, 2, 3, 4]

二、生成器

1、返回迭代器的函式是乙個生成器generator。生成器可用於for迴圈,也可用__next__()取值

#

函式func(n)是乙個生成器,返回包含斐波拉契數列的乙個迭代器。

deffunc(n):

a, b = 0, 1

for i in

range(n):

yield

b a, b = b, a+b

#func()是乙個生成器,可用於for迴圈

for i in func(3):

print(i)

2、另一種建立生成器的方法

>>> a = [x**2 for x in range(3)]

>>>a

[0, 1, 4]

>>>type(a)

'list

'>

>>> b = (x**2 for x in range(3)) #

b是乙個生成器

>>>b

at 0x0221cb70>

>>> for i in

b:...

print

(i)...01

4>>>

Python迭代器和生成器

先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...

Python迭代器和生成器

迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...

python 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...