python中的函數(shù),大多需要配置參數(shù),以下是幾種函數(shù)的參數(shù)類型:
專注于為中小企業(yè)提供成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)河間免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
1.必備參數(shù):以正確的順序、個數(shù)傳入函數(shù)。調(diào)用時的參數(shù)情況要和聲明時一樣。最常用的情況。
def tplink(a,b):
c=a+b+b
return c?
tplink(4,2)
2.關(guān)鍵字參數(shù):使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序和聲明時不一致,因為python解析器會在調(diào)用函數(shù)時,用參數(shù)名匹配參數(shù)值。
def tplink(age1,age2):
ageall=age1+age2+age2
return ageall
tplink(age2=4,age1=2)
3.默認參數(shù):默認某個參數(shù)的取值
def tplink(age1,age2=5):
ageall=age1+age2+age2
return ageall
tplink(age1=4)
4.不定長參數(shù):在聲明時并不確定 調(diào)用時的參數(shù)數(shù)量。這種情況,可以用不定長參數(shù)進行解決,具體操作是在參數(shù)名前用*。
但不能和 關(guān)鍵字參數(shù)并用。一般在正常參數(shù)arg之后。
*args、**kwargs的定義:
這兩個都是python中的不定長參數(shù),又稱為可變參數(shù)。
*args 表示任何多個無名參數(shù),它是一個 tuple ;
**kwargs 表示關(guān)鍵字參數(shù),它是一個dict。
同時使用 * args和 ** kwargs 時,必須 * args參數(shù)列要在 ** kwargs前。且都在arg之后。
函數(shù)在調(diào)用時,會根據(jù)順序,看是否放進 *args 或者 **kwargs中。
具體可根據(jù)實際情況使用,可以 更方便靈活的接收信息。
#函數(shù)傳遞參數(shù)
def func_args( ?*vartuple ):
args = []
#任何傳入的參數(shù)都加入列表
for var in vartuple:
args.append(var)
return args
a = func_args("123","abc","ABC","000")
print(a)
python 的函數(shù)參數(shù)類型分為4種:
1.位置參數(shù):調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù),位置參數(shù)也可以叫做必要參數(shù),函數(shù)調(diào)用時必須要傳的參數(shù)。
當參數(shù)滿足函數(shù)必要參數(shù)傳參的條件,函數(shù)能夠正常執(zhí)行:
add(1,2) #兩個參數(shù)的順序必須一一對應(yīng),且少一個參數(shù)都不可以
當我們運行上面的程序,輸出:
當函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了一個參數(shù)時,程序會拋出異常
add(1)
當我們運行上面的程序,輸出:
當函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了三個參數(shù)時,程序會拋出異常
add(1,2,3)
當我們運行上面的程序,輸出
2.關(guān)鍵字參數(shù):用于函數(shù)調(diào)用,通過“鍵-值”形式加以指定。可以讓函數(shù)更加清晰、容易使用,同時也清除了參數(shù)的順序需求。
add(1,2) # 這種方式傳參,必須按順序傳參:x對應(yīng)1,y對應(yīng):2
add(y=2,x=1) #以關(guān)健字方式傳入?yún)?shù)(可以不按順序)
正確的調(diào)用方式
add(x=1, y=2)
add(y=2, x=1)
add(1, y=2)
以上調(diào)用方式都是允許的,能夠正常執(zhí)行
錯誤的調(diào)用方式
add(x=1, 2)
add(y=2, 1)
以上調(diào)用都會拋出SyntaxError 異常
上面例子可以看出:有位置參數(shù)時,位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,但關(guān)鍵字參數(shù)之間不存在先后順序的
3.默認參數(shù):用于定義函數(shù),為參數(shù)提供默認值,調(diào)用函數(shù)時可傳可不傳該默認參數(shù)的值,所有位置參數(shù)必須出現(xiàn)在默認參數(shù)前,包括函數(shù)定義和調(diào)用,有多個默認參數(shù)時,調(diào)用的時候,既可以按順序提供默認參數(shù),也可以不按順序提供部分默認參數(shù)。當不按順序提供部分默認參數(shù)時,需要把參數(shù)名寫上
默認參數(shù)的函數(shù)定義
上面示例第一個是正確的定義位置參數(shù)的方式,第二個是錯誤的,因為位置參數(shù)在前,默認參數(shù)在后
def add1(x=1,y) 的定義會拋出如下異常
默認參數(shù)的函數(shù)調(diào)用
注意:定義默認參數(shù)默認參數(shù)最好不要定義為可變對象,容易掉坑
不可變對象:該對象所指向的內(nèi)存中的值不能被改變,int,string,float,tuple
可變對象,該對象所指向的內(nèi)存中的值可以被改變,dict,list
這里只要理解一下這個概念就行或者自行百度,后續(xù)會寫相關(guān)的專題文章講解
舉一個簡單示例
4.可變參數(shù)區(qū)別:定義函數(shù)時,有時候我們不確定調(diào)用的時候會多少個參數(shù),j就可以使用可變參數(shù)
可變參數(shù)主要有兩類:
*args: (positional argument) 允許任意數(shù)量的可選位置參數(shù)(參數(shù)),將被分配給一個元組, 參數(shù)名前帶*,args只是約定俗成的變量名,可以替換其他名稱
**kwargs:(keyword argument) 允許任意數(shù)量的可選關(guān)鍵字參數(shù),,將被分配給一個字典,參數(shù)名前帶**,kwargs只是約定俗成的變量名,可以替換其他名稱
*args 的用法
args 是用來傳遞一個非鍵值對的可變數(shù)量的參數(shù)列表給函數(shù)
語法是使用 符號的數(shù)量可變的參數(shù); 按照慣例,通常是使用arg這個單詞,args相當于一個變量名,可以自己定義的
在上面的程序中,我們使用* args作為一個可變長度參數(shù)列表傳遞給add()函數(shù)。 在函數(shù)中,我們有一個循環(huán)實現(xiàn)傳遞的參數(shù)計算和輸出結(jié)果。
還可以直接傳遞列表或者數(shù)組的方式傳遞參數(shù),以數(shù)組或者列表方式傳遞參數(shù)名前面加(*) 號
理解* * kwargs
**kwargs 允許你將不定長度的鍵值對, 作為參數(shù)傳遞給函數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict
下篇詳細講解 *args, **kwargs 的參數(shù)傳遞和使用敬請關(guān)注