實參和形參
一、位置參數
位置參數:按順序定義的參數,包涵兩個維度實參和形參,需要從兩個角度去看
1.在定義函數時,按照從左到右的順序依次定義形參,稱為位置形參
2.在調用函數時,按照從左到右的順序依次定義實參,稱為位置實參
#coding = utf-8 def print_hello(name,age,sex): #name,age,sex位置形參 print('Name:%s Age:%s Sex:%s' %(name,age,sex)) #'Muse',26,'男' 位置實參 print_hello('Muse',26,'男')
注:位置實參和位置形參必須一一對應,切一個參數都不可以少
二、關鍵字參數
用於函數調用,通過“鍵-值”形式加以指定。可以讓函數更加清晰、容易使用,同時也清除了參數的順序需求。
#coding = utf-8 def print_hello(name,age,sex): print('Name:%s Age:%s Sex:%s' %(name,age,sex)) #關鍵字參數sex='male',name='lili',age=18 print_hello(sex='male',name='lili',age=18)
三、默認參數
用於定義函數,為參數提供默認值,調用函數時可傳可不傳該默認參數的值,如果不傳就取定義時候的值,傳了改變為新的值
#coding = utf-8 def print_hello(name,age,sex = '女' ): #sex = '女' 為默認參數 print('Name:%s Age:%s Sex:%s' %(name,age,sex)) print_hello('Muse',26,'男')
注:1.關鍵字參數和默認參數的區別:關鍵字參數是在調用的時候以key = value的形式進行傳值的,默認參數是在定義的時候
2.默認參數的值通常應設為不可變類型
3.定義函數的時候,默認參數必須在位置參數之后
四、可變長度的參數
1.可變長度的位置參數
在最后一個形參名前加*,溢出的位置參數都會被接收,以元組的形式保存下來賦值給該形參
def foo(x,y,z=1,*args): #在最后一個形參名args前加*號 print(x) print(y) print(z) print(args) foo(1,2,3,4,5,6,7)
2.可變長度的關鍵字參數
在最后一個形參名前面加**,調用函數時,溢出的關鍵字參數都會被接收,以字典的形式保存下來賦值給該形參
def foo(x,**kwargs): #在最后一個參數kwargs前加** print(x) print(kwargs) foo(x=1,y=2,z=3) #溢出的關鍵字實參y=2,z=3都被**接收,以字典的形式保存下來,賦值給kwargs {'z': 3, 'y': 2}
3.解包裹(*和**)
1)在傳遞元組時,讓元祖的每一個元素對應一個位置參數
def print_hello(name, sex): print name, sex # args = ('tanggu', '男') #兩個形參一個實參,運行的時候會解包為一一對應 # print_hello(*args) #運行結果 # tanggu 男
2)在傳遞字典時,讓字典的每個鍵值對作為一個關鍵字參數傳遞給函數
def print_hello(kargs): print kargs kargs = {'name': 'tanggu', 'sex', u'男'} print_hello(**kargs) #運行結果 {'name': 'tanggu', 'sex', u'男'}