day_11_函數(shù)進(jìn)階
1.函數(shù)作為變量
python中聲明函數(shù)其實(shí)就是聲明一個(gè)類型是function的變量,函數(shù)名就是變量名
普通變量能做的事情函數(shù)都可以做
1-1 一個(gè)變量可以給另一個(gè)變量賦值
將函數(shù)名作為變量,給另一個(gè)變量賦值
1-2 一個(gè)變量作為容器的元素
1-3 變量可以作為函數(shù)的參數(shù)
函數(shù)作為函數(shù)的參數(shù)(實(shí)參高階參數(shù))
應(yīng)用:sort函數(shù);sorted();max();min()函數(shù)中key參數(shù)
序列.t函數(shù)有個(gè)參數(shù)key顶吮,這個(gè)參數(shù)要求傳一個(gè)函數(shù),并且函數(shù)有一個(gè)參數(shù)和一個(gè)返回值
參數(shù)就是序列中的元素扮授,返回值就是排序比較的對(duì)象
例子
all_message =[
('stu_1','py19020011'),
('stu_2','py19020042'),
('stu_3','py19020023')
]
# all_message.sort(key= lambda x: x[1] ,reverse= True) # 學(xué)號(hào)從大到小
# all_message.sort(key= lambda x: x[1][-1] ,reverse= True) # 學(xué)號(hào)最后一位從大到小
# print(all_message)
1-4.變量作為函數(shù)的返回值
將一個(gè)函數(shù)作為函數(shù)的返回值(返回值高階函數(shù))
def func1():
def temp(*nums):
return sum(nums)
return temp
print(func1()(1,3,5,9))
迭代器/生成器
1.什么是迭代器(iter)
迭代器是容器型數(shù)據(jù)類型(可以同時(shí)存儲(chǔ)多個(gè)數(shù)據(jù)),但是想要獲取/查看迭代器中元素的值,只能將元素取出來。
取出來的元素在迭代器中就不存在了湿右,取得時(shí)候只能從前往后一個(gè)一個(gè)的取,不能跳著取罚勾。
2.迭代器中的元素
迭代器的元素只能通過類型轉(zhuǎn)換毅人,將其他容器轉(zhuǎn)換成迭代器吭狡;或者通過生成器去生成。
2-1 轉(zhuǎn)換 - 所有序列都可以轉(zhuǎn)換成迭代器丈莺。迭代器中的元素可以是任何類型的數(shù)據(jù)
3.獲取迭代器中的元素 --> 迭代器獲取元素划煮,不管以什么樣的方式獲取,獲取后缔俄,這個(gè)元素在迭代器中就不存在了
3-1 next(迭代器) - 獲取迭代器頂部數(shù)據(jù)(最上面的數(shù)據(jù))
next(iter),next.next ()
3-2 遍歷獲取每個(gè)元素
4.什么是生成器
4-1 生成器就是迭代器弛秋,迭代器不一定是生成器
調(diào)用一個(gè)帶有yield關(guān)鍵字的函數(shù)就能得到一個(gè)生成器。(yield 只能出現(xiàn)在函數(shù)體當(dāng)中)
4-2 生成器的元素
生成器獲取元素的方式和迭代器一樣:next()和循環(huán)遍歷
生成器元素的個(gè)數(shù):看執(zhí)行完生成器對(duì)應(yīng)的函數(shù)會(huì)遇到幾次yield
4-3 元素的值:看yield后面的結(jié)果
4-4 生成器產(chǎn)生數(shù)據(jù)的原理
當(dāng)獲取生成器的元素俐载,會(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é)束位置:以此類推意敛,如果next方法在開始執(zhí)行到函數(shù)結(jié)束未遇到y(tǒng)ield,那么就獲取不到元素太抓,報(bào)錯(cuò)空闲。
5.生成式
生成式本質(zhì)還是生成器,知識(shí)寫法更簡潔
5-1 生成式的寫法
# 語法1
(表達(dá)式 for 變量 in 序列)
# 展開
def func():
for 變量 in 序列:
yield 表達(dá)式
gen = func()
# 一句話實(shí)現(xiàn)交換一個(gè)字典的key和value
dict1 = dict1((value,key) for key,value in dict1.item())
# 語法2
(表達(dá)式 for 變量 in 序列 if 條件語句)
# 展開
def func():
for 變量 in 序列:
if 條件語句:
yield 表達(dá)式
gen = func()
說明
() --> 固定寫法
表達(dá)式 --> 除了賦值語句意外的任何語句走敌,比如:數(shù)據(jù)碴倾、賦值過的變量、運(yùn)算表達(dá)式掉丽、函數(shù)調(diào)用表達(dá)式等跌榔,這個(gè)表達(dá)式一般都和后面的變量有聯(lián)系
補(bǔ)充:python三目運(yùn)算符
值1 if 條件語句 else 值2
最后編輯于 :2019.04.29 11:28:22
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者