函數(shù)分類
1哗魂、內(nèi)置函數(shù)
為了方便我們的開發(fā),針對(duì)一些簡(jiǎn)單的功能漓雅,python解釋器已經(jīng)為我們定義好了的函數(shù)即內(nèi)置函數(shù)录别。對(duì)于內(nèi)置函數(shù)羹与,我們可以拿來就用而無(wú)需事先定義,如len(),sum(),max()
ps:我們將會(huì)在最后詳細(xì)介紹常用的內(nèi)置函數(shù)庶灿。
2纵搁、自定義函數(shù)
很明顯內(nèi)置函數(shù)所能提供的功能是有限的,這就需要我們自己根據(jù)需求往踢,事先定制好我們自己的函數(shù)來實(shí)現(xiàn)某種功能腾誉,以后,在遇到應(yīng)用場(chǎng)景時(shí)峻呕,調(diào)用自定義的函數(shù)即可利职。
函數(shù)的參數(shù)
形參與實(shí)參
形參即變量名,實(shí)參即變量值瘦癌,函數(shù)調(diào)用時(shí)猪贪,將值綁定到變量名上,函數(shù)調(diào)用結(jié)束讯私,解除綁定
1热押、位置參數(shù):按照從左到右的順序定義的參數(shù)
位置形參:必選參數(shù)
位置實(shí)參:按照位置給形參傳值
2、關(guān)鍵字參數(shù):按照key=value的形式定義的實(shí)參
無(wú)需按照位置為形參傳值
注意的問題:
1. 關(guān)鍵字實(shí)參必須在位置實(shí)參右面
2. 對(duì)同一個(gè)形參不能重復(fù)傳值
3斤寇、默認(rèn)參數(shù):形參在定義時(shí)就已經(jīng)為其賦值
可以傳值也可以不傳值桶癣,經(jīng)常需要變得參數(shù)定義成位置形參,變化較小的參數(shù)定義成默認(rèn)參數(shù)(形參)
注意的問題:
1. 只在定義時(shí)賦值一次
2. 默認(rèn)參數(shù)的定義應(yīng)該在位置形參右面
3. 默認(rèn)參數(shù)通常應(yīng)該定義成不可變類型
4娘锁、可變長(zhǎng)參數(shù):
可變長(zhǎng)指的是實(shí)參值的個(gè)數(shù)不固定
而實(shí)參有按位置和按關(guān)鍵字兩種形式定義牙寞,針對(duì)這兩種形式的可變長(zhǎng),形參對(duì)應(yīng)有兩種解決方案來完整地存放它們莫秆,分別是*args间雀,**kwargs
===========*args===========
def foo(x,y,*args):
print(x,y)
print(args)
foo(1,2,3,4,5)
def foo(x,y,*args):
print(x,y)
print(args)
foo(1,2,*[3,4,5])
def foo(x,y,z):
print(x,y,z)
foo(*[1,2,3])
===========**kwargs===========
def foo(x,y,**kwargs):
print(x,y)
print(kwargs)
foo(1,y=2,a=1,b=2,c=3)
def foo(x,y,**kwargs):
print(x,y)
print(kwargs)
foo(1,y=2,**{'a':1,'b':2,'c':3})
def foo(x,y,z):
print(x,y,z)
foo(**{'z':1,'x':2,'y':3})
===========*args+**kwargs===========
def foo(x,y):
print(x,y)
def wrapper(*args,**kwargs):
print('====>')
foo(*args,**kwargs)
5、命名關(guān)鍵字參數(shù):*后定義的參數(shù)镊屎,必須被傳值(有默認(rèn)值的除外)惹挟,且必須按照關(guān)鍵字實(shí)參的形式傳遞
可以保證,傳入的參數(shù)中一定包含某些關(guān)鍵字
def foo(x,y,args,a=1,b,*kwargs):
print(x,y)
print(args)
print(a)
print(b)
print(kwargs)
foo(1,2,3,4,5,b=3,c=4,d=5)
結(jié)果:
1
2
(3, 4, 5)
1
3
{'c': 4, 'd': 5}