生成器generator 迭代器 iterator 列表推導(dǎo)式
生成器 generator
生成器與迭代器是一種,生成器的本質(zhì)就是迭代器晤郑,唯一的區(qū)別:生成器是我們自己用python代碼構(gòu)建的數(shù)據(jù)結(jié)構(gòu)。迭代器都是python提供的劲够,或者轉(zhuǎn)化得來(lái)的。
一個(gè)包含yield關(guān)鍵字的函數(shù)就是一個(gè)生成器函數(shù)
并且yield不能和return共用,并且yield只能用在函數(shù)內(nèi)济榨。
- 生成器Demo:
import time def generator_demo(n): "這個(gè)函數(shù)在每次循環(huán)時(shí)都會(huì)產(chǎn)生一個(gè)值,之后將其返還給它的調(diào)用者绿映。" "有yield的函數(shù)稱(chēng)為生成器擒滑,這個(gè)函數(shù)就是生成器函數(shù)" for i in range(1, n+1): yield f"{i} square = {[i**2]}" g = generator_demo(10000) # 創(chuàng)建生成器對(duì)象 print(g) # <generator object generator_demo at 0x0000020C906CC660> # 在一個(gè)for循環(huán)中時(shí),在循環(huán)中每一次完成函數(shù)的yield語(yǔ)句后叉弦,控制權(quán)都會(huì)返還給函數(shù) for i in g: print(i) time.sleep(1)
迭代器 iterator
- 迭代是訪問(wèn)集合元素的一種方式丐一;
- 迭代器是一個(gè)可以記住遍歷的位置的對(duì)象。
- 迭代器對(duì)象從集合的第一個(gè)元素開(kāi)始訪問(wèn)淹冰,直到所有的元素被訪問(wèn)完結(jié)束库车。迭代器只能往前不會(huì)后退。
- 迭代器有兩個(gè)基本的函數(shù)iter() 和 next()
- 字符串樱拴,列表柠衍,元組對(duì)象都可以用于創(chuàng)建迭代器:
list = [1, 2, 3, 4]
it = iter(list)
print(next(it)) # 1
print(next(it)) # 2
- 迭代器對(duì)象可以用for遍歷:
list = [1, 2, 3, 4]
it = iter(list)
for i in it:
print(i, end=" ") # 1 2 3 4
- 也可以使用next()函數(shù):
import sys
list = [1, 2, 3, 4]
it = iter(list)
while True:
try:
print(next(it))
except StopIteration:
sys.exit()
?
列表推導(dǎo)式
-
描述:
- 是Python的一種獨(dú)有特性。推導(dǎo)式是可以從一個(gè)數(shù)據(jù)序列構(gòu)建另一個(gè)新的數(shù)據(jù)序列的結(jié)構(gòu)體晶乔。
-
共有三種推導(dǎo)式:
-
列表(list)推導(dǎo)式
l1 = [i for i in range(11) if i % 3 == 0] print(l1) # [0, 3, 6, 9] l2 = [i for i in range(1, 11)] print(l2) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] l3 = [i**2 for i in range(1, 7)] print(l3) # [1, 4, 9, 16, 25, 36]
-
-
字典(dict)推導(dǎo)式
d = {v.lower(): k.upper() for k, v in dict.items()} print(d) # {'apple': 'A', 'button': 'B'}
-
列表(set)推導(dǎo)式
s1 = {i+i for i in "python"} print(s1) # {'tt', 'pp', 'yy', 'hh', 'oo', 'nn'}