生成器和迭代器

2021-08-24 20:50:14 字數 2318 閱讀 8911

1.  iterator(迭代器)

舉例:我們對list使用for

for i in [1,2,3,4]:

print(i)12

34

對string物件使用for

for ch in 'python':

print(ch)py

thon

對字典物件使用for

for k in :

print(k)

yx

對檔案使用for

for line in open('a.text'):

print(line)

fisrt line

second line

這樣的可以用for迴圈來操作的物件稱為可迭代物件

內建函式 iter() 需要乙個可迭代的物件作為引數生成乙個迭代器:迭代器的作用就是除了具有for迴圈方法之外,還有函式自帶的next()方法  (python3內建函式調是__next__()方式,是屬於迭代器的屬性)。

>>> x = iter([1,2,3])

>>> x

>>> x.__next__()

1>>> x.__next__()

2>>> x.__next__()

3>>> x.__next__()

traceback (most recent call last):

file "", line 1, in stopiteration

也可以用類的定義來定義next()方法來呼叫

class iter:

def __init__(self,n):

self.i = 0

self.n = n

def __iter__(self):

return self

def next(self):

if self.i 2.generator(生成器)

什麼是生成器?一句話,生成器本質就是迭器。生成器是連續生成一堆結果的函式(不是單個值),有關鍵字yield帶領

def foo():

print('begin')

for i in range(4):

print('before yield',i)

yield i

print('after yield',i)

print('end')

>>> f = foo()

>>> f.__next__()

begin

before yield 0

0>>> f.__next__()

after yield 0

before yield 1

1>>> f.__next__()

after yield 1

before yield 2

2>>> f.__next__()

after yield 2

endtraceback (most recent call last):

file "", line 1, in stopiteration

>>>

yield 的作用是乙個開關一樣,你呼叫next()是,會生成值輸出,然後整個函式停在yield所在地,也就是後面的print()不執行。當下次呼叫yield時,從上一次暫停的地方開始,開始迴圈,再次到yield處。

3.生成器表示式(生成器版本的列表集合)

本質是列表,但是不返回列表,返回乙個列表生成器,也就是乙個關著的list。

>>> a = (x*x for x in range(5))

>>> a

at 0x000001ea3a449660>

>>> sum(a)

30>>>

4.itertools 這是標準庫裡面的模組,包含很多迭代器操作函式

chain(鍊子)-將兩個迭代器加在一起

>>> it1 = iter([1,2,3])

>>> it2 = iter([4,5,6])

>>> itertools.chain(it1,it2)

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

izip -迭代版本的zip

>>> for x,y in itertools.izip(['a','b','c'],[1,2,3]):

... print(x,y)

...a 1

b 2c 3

生成器和迭代器

可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...

迭代器和生成器

1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...

迭代器和生成器

迭代器 迭代 iterate 意味著重複多次,就像迴圈那樣。本書前面只使用for迴圈迭代過序列和字典,但實際上也可迭代其他物件 實現了方法iter的物件。方法iter返回乙個迭代器,它是包含next的物件,而呼叫這個方法時可不提供任何引數。當你呼叫方法next時,迭代器應返回其下乙個值。如果迭代器沒...