Python函數(shù)


概念
程序?qū)⒁徊糠謩偰艽a封裝起來,并在需要該功能代碼的地方進(jìn)行調(diào)用,不僅可以實現(xiàn)代碼的復(fù)用,更重要的是可以保證代碼的一致性,當(dāng)需要修改功能代碼是只需要修改函數(shù),調(diào)用函數(shù)的位置不會受到影響。
函數(shù)的分類
根據(jù)函數(shù)來源分
內(nèi)建函數(shù)
Python內(nèi)部定義的函數(shù):int(),round()
自定義函數(shù)
有用戶自己創(chuàng)建的滿足浮渣環(huán)境下用戶的需求
根據(jù)函數(shù)的特點分
嵌套函數(shù)
函數(shù)體中定義了另一個函數(shù),這兩個函數(shù)的關(guān)系就是嵌套關(guān)系
遞歸函數(shù)
一個函數(shù)內(nèi)部調(diào)用自身的函數(shù)稱為遞歸函數(shù)(階乘)
匿名函數(shù)
沒有函數(shù)名的函數(shù),使用lambda表示式定義匿名函數(shù)
lambda 參數(shù):表達(dá)式
lambda表達(dá)式整體可以看做是一個值可以賦值給變量:
f = lambda 參數(shù):表達(dá)式
當(dāng)調(diào)用匿名函數(shù)時可以將該變量看做是函數(shù)名:f(函數(shù))
參數(shù):相當(dāng)于普通函數(shù)的形式參數(shù)
表達(dá)式:相當(dāng)于普通函數(shù)的函數(shù)體,只能當(dāng)是一條語句
創(chuàng)建方法及調(diào)用
格式:
def 函數(shù)體(形參列表):
函數(shù)體
return 返回值
1.函數(shù)在命名時要符合命名規(guī)則
1)可以由字母、數(shù)字和下劃線組成,不能以數(shù)字開頭
2)不能使用關(guān)鍵字
3)嚴(yán)格區(qū)分大小寫
4)函數(shù)名命名時要見名之意
5)函數(shù)都使用小寫字母
2.函數(shù)的形參不需要聲明變量,也不需要指定函數(shù)返回值類型
3.使用該函數(shù)沒有任何的參數(shù),小括號不能省略
4.括號后的:必須保留
5.函數(shù)體相對于關(guān)鍵字def保持一定空格的縮進(jìn)
6.return可以省略的,可以直接在函數(shù)體中將返回值print()輸出
調(diào)用
函數(shù)名(實際參數(shù))
參數(shù)種類
位置參數(shù)
在函數(shù)調(diào)用時必須根據(jù)形參的個數(shù)及位置對其一一賦值,該類形參稱之為位置參數(shù)
默認(rèn)參數(shù)
定義函數(shù)形參是,可以給參數(shù)設(shè)置默認(rèn)值,這個被設(shè)置了默認(rèn)值的參數(shù),稱之為默認(rèn)參數(shù)
注意:默認(rèn)參數(shù)必須定義在位置參數(shù)后面
不定長參數(shù)
定義函數(shù)時,若希望函數(shù)能過處理的參數(shù)個數(shù)比當(dāng)初定義的參數(shù)個數(shù)多,可以使用不定長參數(shù)(可變參數(shù))
*args:用于接收普通參數(shù)并以元組的形式存放
**args:用于接收格式為 可用=value形式的參數(shù),并以字典形式存放
變量作用域
變量種類
局部變量(Local)
在函數(shù)體內(nèi)定義的變量,當(dāng)函數(shù)調(diào)用時優(yōu)先調(diào)用局部變量,只能在函數(shù)體中使用
閉包變量(Enclosed)
函數(shù)嵌套時,內(nèi)嵌函數(shù)定義的變量稱之為閉包變量,外部函數(shù)定義變量稱為局部變量。
1.函數(shù)嵌套關(guān)系
2.內(nèi)嵌函數(shù)使用外部函數(shù)定義的變量
3.外部函數(shù)的返回值是內(nèi)嵌函數(shù)
閉包三個條件
全局變量(Global)
在函數(shù)體外定義的變量,變量可以在整個模塊中使用
內(nèi)建變量(Built)
內(nèi)建函數(shù)定義的變量
LEGB原則
四種變量訪問優(yōu)先級:局部變量>閉包變量>全局變量>內(nèi)建變量
變量間的轉(zhuǎn)換
局部變量轉(zhuǎn)換為全局變量
在函數(shù)體內(nèi)使用global關(guān)鍵字對轉(zhuǎn)換的變量進(jìn)行聲明:global 變量名
閉包變量轉(zhuǎn)換為局部變量
在函數(shù)體中使用關(guān)鍵字對轉(zhuǎn)換的變量進(jìn)行聲明: 變量名
常用函數(shù)
map()
根據(jù)提供的函數(shù)對指定的序列做映射
格式:map(函數(shù),序列)
函數(shù):可以是普通函數(shù)也可以是匿名函數(shù)
序列:字符串,列表,元組
filter()
對指定的序列進(jìn)行過濾操作。(將不滿足函數(shù)條件的序列元素進(jìn)行提?。?/p>
格式:filter(函數(shù),序列)
reduce()
對序列的元素進(jìn)行累積
1.使用reduce()函數(shù)時必須先導(dǎo)入functools模塊:from functools importreduce
2.reduce()函數(shù)中的函數(shù)必須一個有兩個參數(shù)的函數(shù)
格式:reduce(函數(shù),列表)
reduce(lambda x,y :x+y,[1,2,3,4])