天天看點

python怎麼了解函數的參數,python函數參數的了解

Python函數參數的名稱主要有:位置參數、關鍵字參數、預設參數、可變參數(可變數量參數)四種。這四種參數使用起來有什麼差別呢?這篇部落客要想談談自己對這個問題的了解。注:在中國,大學專業中工科類基本上都會開設C/C++課程,以此為介紹的起點。

在C語言中,定義函數如下:

int max(int num1, intnum2)

{

intresult;if (num1 >num2)

result=num1;elseresult=num2;returnresult;

}

在調用函數 max() 時,需要将 2 個具體的數值(實參)賦給 max() 函數,例如 max(2,5),如果少于或多于 2 個參數都不可以。在Python 中,有相同的函數參數形式,稱為:位置參數,使用方式如下:

1 #!/usr/bin/python

2

3 #Function definition is here

4 defprintinfo( name, age ):

6 print "Name:", name7 print "Age", age

此處 name 與 sex 必須輸入相同數量(2個)有序的兩個量,這是 Python 中第一個基本的輸入參數形式。還有第二種麼?  是的,那就是:關鍵字參數 使用方式如下:

1 #!/usr/bin/python

2

3 #Function definition is here

4 def printinfo( name='MAX', age='18'):5 print "Name:", name6 print "Age", age

關鍵字參數不同于位置參數的地方在于:輸入參數個數可以是 0、1、2個,即小于等于2 。此處如果輸入 1 個參數 name ,age 不輸入則 name 為關鍵字參數,age為 預設參數 那位置參數與關鍵字參數兩種類型的參數是否可以組合使用呢?可以,使用原則如下:

1、位置參數必須在關鍵字參數的前

2、多個關鍵字參數之間不存在先後順序

#以下是用關鍵字參數正确調用函數的執行個體#print_hello('tanggu', sex=1)#print_hello(name='tanggu', sex=1)#print_hello(sex=1, name='tanggu')

#以下是錯誤的調用方式#print_hello(1, name='tanggu')#print_hello(name='tanggu', 1)#print_hello(sex=1, 'tanggu')

到目前為止,參數個數都限定在函數定義參數個數之下,那有沒有辦法讓可輸入參數超出這個範圍呢?即讓 max(a,b)可以接受多于 2 個參數,Python提出了一種方案:在參數中引入元祖(tuple)和字典(dict)概念,得到如下的參數定義:

1 def func(*args, **kwargs):2

将位置參數包裹(paking)為元祖集合,将關鍵字參數包裹為字典集合,以允許接收更多的參數,進而得到了可變數量參數,舉例如下:

元祖:

1def func(*args):2 sum =03 for x inargs:4 sum +=x5 returnsum6

7 print(func(1,2,3)) //6

8 //将list或tuple内全部元素作為可變參數9 L = [1,2,3,4]10 print(func(*L)) //10

字典:

def func(a,b,**kw):

sum= a+bprint(a,'+',b,'=',sum,kw)

func(2,3,color="black",phone="vivo")// Out:2 + 3 = 5 {'color': 'black', 'phone': 'vivo'}//先組裝dict,再作為關鍵字參數傳進去

desc= {'color': 'black', 'phone': 'vivo'}

func(2,3,**desc)// Out:2 + 3 = 5 {'color': 'black', 'phone': 'vivo'}

總結:兩種基本參數類型為:位置參數和關鍵字參數。通過有初值的關鍵字參數得到預設參數,通過将基本類型參數的包裹得到可變數量參數 。

緻謝:

文章引用了以下部落格的例子,感謝你們的分享

引用:

1、https://segmentfault.com/a/1190000013117996

2、https://www.cnblogs.com/VseYoung/p/python_def.html

3、https://www.tutorialspoint.com/python/python_functions.htm

4、https://www.cnblogs.com/frankyou/p/5718888.html

5、http://www.runoob.com/cprogramming/c-functions.html

2018-07-19 12:33:52

原文連結:https://www.cnblogs.com/be-fly-MAX/p/9335128.html