python3 7 迭代器和生成器

2022-07-20 11:51:18 字數 2468 閱讀 5261

#

!/usr/bin/env python

__author__ = "

lrtao2010"#

python3.7 迭代器和生成器

#迭代器協議:

'''要麼就引起乙個stopiteration異常,已終止迭代,只能往後走,不能往前退.

2、可迭代物件:實現了迭代器協議的物件(物件內部定義乙個__iter__()方法),節省記憶體

3、協議是一種約定,可迭代物件實現了迭代器協議,python的內部工具(如for、sum、min、max等)

使用迭代器協議訪問物件。

'''#

for 迴圈的強大功能

'''字串,列表,元祖,字典,集合。這些都不是可迭代物件(沒有next方法),在for 迴圈中,呼叫了他們的內部

__iter__方法,把他們變成了可迭代物件。

for迴圈呼叫可迭代物件的__next__方法去取值,並且for 迴圈可以捕捉stopiteration異常,終止迭代。

'''#

l_test=[1,2,3]

#iter_l_test=l_test.__iter__()

#print(iter_l_test.__next__())

#print(iter_l_test.__next__())

#print(iter_l_test.__next__())

#print(iter_l_test.__next__())

## 1

## 2

## 3

## traceback (most recent call last):##

# print(iter_l_test.__next__())

## stopiteration

#用whilex迴圈模擬for迴圈

#l_test=[1,2,3]

#iter_l_test=l_test.__iter__()

#while true:

#try:

##print(iter_l_test.__next__())

#print(next(iter_l_test))

#except stopiteration:

##print('end')

#break

#生成器

'''生成器也是一種資料型別,這種資料型別自動實現了「迭代器協議」,生成器是可迭代物件。

生成器分類:

1、生成器函式:常規函式定義,但是使用yield語句而不是return 語句返回結果,yield語句

一次返回乙個結果,可以使用多次,在每個結果中間,掛起函式的狀態,以便下次從它離開的地方

繼續執行。

2、生成器表示式:類似列表推導式,生成器返回按需產生結果的乙個物件,而不是一次構建

乙個完整的結果列表

生成器優點:

在需要的時候才產生結果,不是立即產生結果

'''#

生成器函式

#def g_test():

#yield 1

#yield 2

#yield 3

#g_test1=g_test()

#print(g_test1)

#print(g_test1.__next__())

#print(g_test1.__next__())

#print(g_test1.__next__())##

## 1

## 2

## 3

#生成器表示式,大資料不會占用大記憶體

#l_g = ('%s' %i for i in range(10) if i%2 == 0)

#print(l_g)

#print(l_g.__next__())

#print(l_g.__next__())

#print(next(l_g))

#print(l_g.__next__())

#at 0x0000000002133570>#0

#2#4

#6#三元表示式

#name = 'test'

#res='true' if name == 'test' else 'false'

#print(res)

#true

#列表解析,大資料占用記憶體比較大

#l_test1=['%s' %i for i in range(10)]

#l_test2=['%s' %i for i in range(10) if i%2 == 0]

#print(l_test1)

#print(l_test2)

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

#['0', '2', '4', '6', '8']

#生成器總結

'''1、節省記憶體

2、提高**可讀性

3、只能遍歷一次,只能遍歷一次,只能遍歷一次

'''

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 迭代器和生成器

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