1. 函數(shù)作為變量
python中聲明函數(shù)其實(shí)就是聲明一個(gè)類型是function的變量,函數(shù)名就是變量名
所有普通變量能做的事函數(shù)都可以做:
a. 一個(gè)變量可以給另外一個(gè)變量賦值:將函數(shù)名作為變量僚焦,給另一個(gè)變量賦值
b. 一個(gè)變量可以作為容器的元素:函數(shù)可以作為容器中的一個(gè)元素
c. 變量可以作為函數(shù)的參數(shù):函數(shù)作為函數(shù)的參數(shù)(實(shí)參高階函數(shù))
d. 變量可以作為函數(shù)的返回值:函數(shù)作為函數(shù)的返回值(返回值高階函數(shù))
sort函數(shù)(sort的高級(jí)使用):實(shí)參高階函數(shù)的運(yùn)用
列表.sort(), sorted(), max(), min() 函數(shù)中key參數(shù)宇弛,key要求:傳一個(gè)函數(shù),并且函數(shù)有一個(gè)參數(shù)和一個(gè)返回值
- 序列.sort函數(shù)中有個(gè)參數(shù)key腰耙,這個(gè)參數(shù)要求傳一個(gè)函數(shù)榛丢,并且函數(shù)有一個(gè)參數(shù)和一個(gè)返回值
- 參數(shù)就是序列中的元素, 返回值就是排序比較的對(duì)象
# def compare(item):
# return item['age']
# all_students.sort(key=compare)
all_students.sort(key=lambda item: item['age'])
print(all_students)
# 將all_message中的元祖按照第二個(gè)元素從大到小排序,然后再按照學(xué)號(hào)的最后一位從小到大排序
all_message = [
('余婷', 'python1902004'),
('張三', 'python1902106'),
('小明', 'python1902027')
]
all_message.sort(key=lambda item: item[1], reverse=True)
print(all_message)
all_message.sort(key=lambda item: item[1][-1])
print(all_message)
2. 迭代器(iter)
1)什么是迭代器
迭代器是容器型類型數(shù)據(jù)(可以同時(shí)存儲(chǔ)多個(gè)數(shù)據(jù)),但是想要獲取/查看迭代器中元素的值挺庞,只能將元素取出來
取出來的元素在迭代器中就不存在了晰赞,取的時(shí)候只能從前往后一個(gè)一個(gè)的取,不能跳著取
2)迭代器中的元素
迭代器的元素只能通過類型轉(zhuǎn)換,將其他容器轉(zhuǎn)換成迭代器:iter(序列) 宾肺;或者通過生成器去生成
轉(zhuǎn)換:所有序列都可以轉(zhuǎn)換成迭代器溯饵;迭代器中的元素可以是任何類型的數(shù)據(jù)
3)獲取迭代器中的元素(不支持增刪改侵俗,只支持查也就是獲认怯谩)
迭代器獲取元素,不管以什么樣的方式獲取隘谣,獲取后增拥,這個(gè)元素在迭代器中就不存在了
next(迭代器) :獲取迭代器頂部的數(shù)據(jù)(最上面的數(shù)據(jù));取完了再取會(huì)報(bào)錯(cuò)(StopIteration)
遍歷獲取每個(gè)元素(只能for循環(huán)遍歷):遍歷一個(gè)丟掉一個(gè)寻歧,遍歷完后元素沒了
3. 生成器(generator)
1)什么是生成器
生成器就是迭代器掌栅,但迭代器不一定是生成器
調(diào)用一個(gè)帶有yield關(guān)鍵字的函數(shù)就能得到一個(gè)生成器(yield只能出現(xiàn)在函數(shù)體中)
2)生成器的元素
生成器獲取元素的方式和迭代器一樣:next()和for循環(huán)遍歷
生成器元素的個(gè)數(shù):看執(zhí)行完生成器對(duì)應(yīng)的函數(shù)會(huì)遇到幾次yield
元素的值:看yield后表達(dá)式的值
3)生成器產(chǎn)生數(shù)據(jù)的原理
當(dāng)獲取生成器的元素的時(shí)候,會(huì)執(zhí)行生成器對(duì)應(yīng)的函數(shù)码泛,從開始執(zhí)行到y(tǒng)ield為止猾封,將yield后面的數(shù)據(jù)作為元素返回并且記錄結(jié)束位置
下次獲取元素的時(shí)候,從上次結(jié)束的位置接著往后執(zhí)行噪珊,直到遇到y(tǒng)ield晌缘,將yield后面的數(shù)據(jù)作為元素返回并且記錄結(jié)束位置
以次類推,如果從開始執(zhí)行到函數(shù)結(jié)束痢站,沒有遇到y(tǒng)ield磷箕,那么就獲取不到元素
最后編輯于 :2019.05.18 13:25:09
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者