迭代器與生成器

2022-04-29 08:48:08 字數 2762 閱讀 1046

目錄三元表示式與列表推導式

字典生成式

zip()方法

生成器總結

迭代的物件

凡有_iter_方法的物件,都是可迭代物件

可迭代物件:python內建str,list.,tuple,dict,set,file

可迭代物件執行__iter__方法得到返回值,並且可迭代物件會有乙個__next__方法。

s='hello'

iter_s = s._iter_()

while true:

try:

print(iter_s__next__())

except stoplteration:

break

hel

lo

迭代器物件:執行可迭代物件__iter__方法,拿到返回值就是迭代器物件。

特點:1,內建__next__方法,執行該方法會拿到迭代器物件中的乙個值

2,內建__iter__方法,執行該方法會拿到迭代器本身

3,檔案本身就是迭代器本iey身

缺點:1,取指麻煩只能乙個乙個取,值取了就沒了

2,無法使用len()方法獲取長度

for迴圈原理

for迴圈稱為迭代器迴圈,in後必須是可迭代物件

因為迭代器使用__iter__後還是迭代器本身,因此for迴圈不用考慮in後的物件是可迭代物件還是迭代器物件。

由於對可迭代物件使用__iter__方法後變成乙個迭代器物件,這個迭代器物件只是占用了一小塊記憶體空間,他只有使用__next__後才會吐出乙個乙個值。如lis = [1,2,3,4,5,...]相當於乙個乙個雞蛋,而lis = [1,2,3,4,5,...].__iter__相當於乙隻老母雞,如果你需要蛋,只需要__next__即可。

條件成立的返回值if條件else不成立時的返回值

x = 10

y = 20

print(f'x if x>y else y:')

x if x>y else y:20
列表推導式
[expression for item1 in iterable1 if condition1

for item2 in iterable2 if condition2

...for itemn in iterablen if conditionn

]類似於

res=

for item1 in iterable1:

if condition1:

for item2 in iterable2:

if condition2

...for itemn in iterablen:

if conditionn:

print(f"[i for i in range(10)]: ")

[i for i in range(10)]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(f"[i**2 for i in range(10)]: ")

[i**2 for i in range(10)]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

print()
keys = ['name', 'age', 'gender']

values = ['nick', 19, 'male']

res = zip(keys, values)

print(f"zip(keys,values): ")

info_dict =

print(f"info_dict: ")

zip(keys,values): info_dict:
yield的英文單詞意思是生產,在函式中但凡出現yield關鍵字,再呼叫函式,就不會繼續執行函式體**,而是會返回乙個值。

def func():

print(1)

yield

print(2)

g = func()

print(g)

yield:

提供一種自定義迭代器的方式

yield可以暫停住函式,並提供當前的返回值

yield和return:

相同點:兩者都是在函式內部使用,都可以返回值,並且返回值沒有型別和個數的限制

不同點:return只能返回一次之;yield可以返回多次值

# 列表推導式

with open('52.txt', 'r', encoding='utf8') as f:

nums = [len(line) for line in f]

print(max(nums))

# 生成器表示式

with open('52.txt','r',encoding='utf8') as f:

nums = (len(line) for line in f)

print(max(nums)) # valueerror: i/o operation on closed file.

迭代器與生成器

可迭代物件 可以直接作用於for迴圈的物件 統稱為可迭代物件 返回迭代器的物件 即iterable。一是集合資料型別,如list tuple dict set str等 二是generator,包括生成器和帶yield的generator function。容器 簡單來說 容器是一系列元素的集合 容...

生成器與迭代器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...

生成器與迭代器

通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...