學習python的第十二天
本節主要內容:
1. ⽣生成器和⽣生成器函式
2. 列列表推導式
⼀、生成器
1. 通過⽣生成器函式
2. 通過各種推導式來實現⽣生成器
3. 通過資料的轉換也可以獲取⽣生成器
send和__next__()區別:
1. send和next()都是讓⽣生成器向下走⼀一次
2. send可以給上⼀一個yield的位置傳遞值, 不能給後⼀一個yield傳送值. 在第⼀一次執⾏行行⽣生
成器程式碼的時候不能使⽤用send()
生成器可以使⽤for迴圈來迴圈獲取內部的元素:
⽣生成器可以使⽤用for迴圈來迴圈獲取內部的元素
def func():
print(111)
yield 222
print(333)
yield 444
print(555)
yield 666
gen = func() f
or i in gen:
print(i) 結果: 111 222 333 444 555 666
二. 列列表推導式, ⽣生成器表示式以及其他推導式
lst = [] for i in range(1, 15): lst.append(i) print(lst)
替換成列列表推導式:
lst = [i for i in range(1, 15)] print(lst)
列列表推導式的常⽤用寫法:
[ 結果 for 變數量 in 可迭代物件 if 條件 ]
後⼀一個知識點: yield from 在python3中提供了了⼀一種可以直接把可迭代物件中的每⼀一個數據作為⽣生成器的結果進⾏行行返回
def gen(): l
st = ["⿇花藤", "胡辣湯", "微星牌餅鐺", "Mac牌鍋鏟"]
yield from lst
g = gen()
for el in g:
print(el)
⼩小坑: yield from是將列列表中的每⼀一個元素返回. 所以. 如果寫兩個yield from 並不會產⽣生交替 的效果.
def gen(): lst = ["⿇花藤", "胡辣湯", "微星牌餅鐺", "Mac牌鍋鏟"]
lst2 = ["餅鐺還是微星的好", "聯想不能煮雞蛋", "微星就可以", "還可以烙餅"]
yield from lst
yield from lst2
g = gen()
for el in g:
print(el)