1.高階函數(shù)
1.函數(shù)就是變量
函數(shù)就是變量俄认,函數(shù)名就是變量名
2.高階函數(shù)
變量可以作為函數(shù)參數(shù)
實(shí)參高階函數(shù):
def func3(x):
print(x(1, 2))
func3(lambda m, n: m+n)
系統(tǒng)提供的常見的實(shí)參高階函數(shù):
1.max骨坑、min共屈、sorted都是實(shí)參高階函數(shù),有一個參數(shù)key需要傳一個函數(shù)今瀑;被傳入的函數(shù)需要一個參數(shù)和一個返回值程梦,這個參數(shù)指向的是序列中的元素,返回值是比較對象
2.map函數(shù):
map(函數(shù),序列) - 將序列中所有的元素按照函數(shù)指定的規(guī)則進(jìn)行轉(zhuǎn)換, 返回的是map的對象(map就是容器型數(shù)據(jù)類型中的一種)放椰。
函數(shù)需要一個參數(shù)和一個返回值作烟,參數(shù)指向的是序列中的元素,返回值就是用來替換原來元素的新元素
將列表list3中所有的元素都加1 -> [11, 21, 31, 41]
new_list3 = map(lambda item: item+1, list3)
print(new_list3, list(new_list3))
3.reduce(函數(shù)砾医,序列) - 對序列中的元素按照函數(shù)提供的功能進(jìn)行累積的操作
函數(shù)需要兩個參數(shù),第一個參數(shù)是初始化或者上次運(yùn)算的結(jié)果,y指向每一個元素
reduce(函數(shù)衣厘,序列, 初始值)
list3 = [10, 20, 30, 40]
result = reduce(lambda x, y: x+y, list3)
print(result)
4.返回值高階函數(shù)
def func1():
def func2(x, y):
return x + y
return func2
print(func1()(100, 200))
func2(100, 200)
2.裝飾器
1.裝飾器作用
在不修改原函數(shù)的前提下給函數(shù)添加新的功能
2.什么是裝飾器
裝飾器的本質(zhì)就是一個函數(shù)(這個函數(shù)是一個實(shí)參高階函數(shù)也是返回值高階函數(shù))
無參裝飾器的寫法:
def 函數(shù)名1(函數(shù)名2):
def 函數(shù)名3(*agrs, *kwargs):
新功能代碼
返回值 = 函數(shù)名2(agrs, **kwargs)
return 返回值
return 函數(shù)名3
說明:
函數(shù)名1 - 裝飾器名字如蚜,命名的時候和這個裝飾器要添加的功能進(jìn)行關(guān)聯(lián)
函數(shù)名2 - 隨便命名,指向被添加功能的函數(shù); 可以命名成 fn
函數(shù)名3 - 隨便命名影暴,在原函數(shù)上添加完新的功能以后產(chǎn)生的新的函數(shù)
新功能代碼 - 實(shí)現(xiàn)新加的功能的代碼
3.模塊
1.什么是模塊
一個模塊就是一個py文件错邦,py文件的文件名就是模塊名
2.在一個模塊中使用另一個模塊的內(nèi)容
1.哪些能用:所有在指定if語句外的全局變量都能用
- 怎么使用:需要先導(dǎo)入模塊
import 模塊名 - 導(dǎo)入后可以使用所有在指定if語句外的全局變量;以'模塊名.變量' 來使用變量
from 模塊名 impott 變量1, 變量2,... - 只可以使用這些指定的變量型宙;直接使用變量
from 模塊名 import * - *表示全部撬呢,可以使用所有在指定if語句外的全局變量(不推薦使用)
from 模塊名 as 新模塊名 - 給模塊取別名
from 模塊名 import 變量名1 as 新變量名1,變量名2 - 給變量1取別名
4.導(dǎo)入模塊的原理
1.導(dǎo)入模塊的原理
當(dāng)使用import或者from import導(dǎo)入模塊的時候妆兑,系統(tǒng)會自動將被導(dǎo)入的模塊中所有的代碼都執(zhí)行一遍
選擇性導(dǎo)入:在被導(dǎo)入的模塊中添加if語句:(if name == 'main':),將不希望被其他模塊執(zhí)行的代碼放在if語句中
每個模塊都有一個屬性叫name魂拦,這個屬性是用來保存當(dāng)前模塊的名字。name默認(rèn)值就是當(dāng)前模塊對應(yīng)的py文件的文件名搁嗓。當(dāng)我們直接執(zhí)行某個模塊的時候芯勘,這個模塊的name屬性就會自動變成'main'
5.包
什么是包:包就是一種特殊的文件夾,文件都是py文件腺逛,自帶一個init.py的文件