函數(shù)定義
- 基本格式
def fn(a,b,c):
# 函數(shù)體
return
- 參數(shù)形式
# 默認(rèn)值
def fn(a = 5 , b = 10 , c = 20):
# 函數(shù)在調(diào)用時(shí)片效,解析器不會(huì)檢查實(shí)參的類型
fn(1,2,3)
fn(b=1 , c=2 , a=3)
# 不定長(zhǎng)參數(shù)
def fn(*a):
# 帶星號(hào)的形參只能有一個(gè)
# 帶星號(hào)的參數(shù)禁筏,可以和其他參數(shù)配合使用
# 第一個(gè)參數(shù)給a荸型,第二個(gè)參數(shù)給b繁涂,剩下的都保存到c的元組中
def fn2(a,b,*c):
# 可變參數(shù)不是必須寫在最后拱她,但是注意,帶*的參數(shù)后的所有參數(shù)扔罪,必須以關(guān)鍵字參數(shù)的形式傳遞
# 第一個(gè)參數(shù)給a椭懊,剩下的位置參數(shù)給b的元組,c必須使用關(guān)鍵字參數(shù)
def fn2(a,*b,c):
# *形參只能接收位置參數(shù)步势,而不能接收關(guān)鍵字參數(shù)
# def fn3(*a) :
# **形參可以接收其他的關(guān)鍵字參數(shù)氧猬,它會(huì)將這些參數(shù)統(tǒng)一保存到一個(gè)字典中
# 字典的key就是參數(shù)的名字,字典的value就是參數(shù)的值
# **形參只能有一個(gè)坏瘩,并且必須寫在所有參數(shù)的最后
def fn3(b,c,**a) :
fn3(b=1,d=2,c=3,e=10,f=20)
# 傳遞實(shí)參時(shí)盅抚,也可以在序列類型的參數(shù)前添加星號(hào),這樣他會(huì)自動(dòng)將序列中的元素依次作為參數(shù)傳遞
# 這里要求序列中元素的個(gè)數(shù)必須和形參的個(gè)數(shù)的一致
def fn4(a,b,c):
d = {'a':100,'b':200,'c':300}
# 通過 **來對(duì)一個(gè)字典進(jìn)行解包操作
fn4(**d)
文檔字符串
- 使用 ``` 來定義倔矾。
- 可以使用 help(函數(shù)對(duì)象) 來查看文檔字符串定義的說明妄均。
作用域
- 全局作用域。
- 函數(shù)作用域哪自。
高階函數(shù)
- 接收函數(shù)作為參數(shù)丰包,或者將函數(shù)作為返回值的函數(shù)是高階函數(shù)。
- 當(dāng)我們使用一個(gè)函數(shù)作為參數(shù)時(shí)壤巷,實(shí)際上是將指定的代碼傳遞進(jìn)了目標(biāo)函數(shù)邑彪。
閉包
- 將函數(shù)作為返回值返回,這種高階函數(shù)我們也稱為叫做閉包胧华。
- 通過閉包可以創(chuàng)建一些只有當(dāng)前函數(shù)能訪問的變量,可以將一些私有的數(shù)據(jù)藏到的閉包中寄症。
- 形成閉包的要件
① 函數(shù)嵌套
② 將內(nèi)部函數(shù)作為返回值返回
③ 內(nèi)部函數(shù)必須要使用到外部函數(shù)的變量
- 實(shí)例
def make_averager():
# 創(chuàng)建一個(gè)列表宙彪,用來保存數(shù)值
nums = []
# 創(chuàng)建一個(gè)函數(shù),用來計(jì)算平均值
def averager(n) :
# 將n添加到列表中
nums.append(n)
# 求平均值
return sum(nums)/len(nums)
return averager
裝飾器
- 定義一個(gè)裝飾器
def begin_end(old):
'''
用來對(duì)其他函數(shù)進(jìn)行擴(kuò)展有巧,使其他函數(shù)可以在執(zhí)行前打印開始執(zhí)行释漆,執(zhí)行后打印執(zhí)行結(jié)束
參數(shù):
old 要擴(kuò)展的函數(shù)對(duì)象
'''
# 創(chuàng)建一個(gè)新函數(shù)
def new_function(*args , **kwargs):
print('開始執(zhí)行~~~~')
# 調(diào)用被擴(kuò)展的函數(shù)
result = old(*args , **kwargs)
print('執(zhí)行結(jié)束~~~~')
# 返回函數(shù)的執(zhí)行結(jié)果
return result
# 返回新函數(shù)
return new_function
- 使用裝飾器
@begin_end
def say_hello():
print('大家好~~~')