python 函數參數定義有四類:
1、必選參數:調用函數時候必須賦值的參數。
a,須以正確的順序傳入函數
b,調用時的數量必須和聲明時的一樣
def exa(x): return x #b作為參數進入函數體內 b=1 print exa(b) #1 print exa() #錯誤 TypeError: exa() takes exactly 1 argument (0 given)
2,默認參數:初始已經有值,在調用時未更改使用默認值
def exa(x=1) return x print exa() # 1 print exa(2) # 2
3,可變參數:不確定參數個數,會分配給帶“*”參數
def exa(*x) return x print exa(1,2,3,4,5,6,6) # (1,2,3,4,5,6,6)
4,關鍵字參數:使用關鍵字參數來確定傳入的參數值。調用函數時帶關鍵字后,順序不影響。
def exa(x,y,z): return x,y,z print exa(y=2,x=3,z=2) #(3, 2, 2)
Tips:可變元組參數和可變字典參數
*x #可變元組參數,參數格式化存儲在一個元組中,長度沒有限制。 #python2必須位於普通參數和默認參數之后。 #python3可以位於默認參數之前 def exa(*x): return x print exa('ai', 'ni', 'ya') #('ai', 'ni', 'ya') **x #可變字典參數 #必須位於參數列表的最后面。 def exa(**x): return x print exa(ai="愛",ni="你") #{'ai': '愛', 'ni': '你'}
函數參數順序
args與必選參數和默認參數混用
1、python2、python3 三者順序是:位置參數、默認參數、*args
def foo(x,y=1,*args): pass foo (1,2,3,4,5) // 其中的x為1,y=1的值被2替換,3,4,5都給args,即args=(3,4,5)
2、python3 三者順序是:位置參數、*args、默認參數
def foo(x,*args,y=1): pass foo (1,2,3,4,5) // 其中的x為1,2,3,4,5都給args,即args=(2,3,4,5),y始終為1
3、python2、python3 **kwargs與位置參數、*args、默認參數混用
**kwargs:可變字典長度(表示的就是形參中按照關鍵字傳值把多余的傳值以字典的方式呈現)
位置參數、*args、**kwargs三者的順序必須是位置參數、*args、**kwargs
def foo(x,*args,**kwargs): pass foo (1,2,3,4,y=5,a=6,b=7) // 其中的x為1,2,3,4都給args,即args=(2,3,4),y=5,a=6,b=7以字典形式傳給kwargs,即kwargs={'y':5,'a':6,'b':7}
python2參數順序:必選參數、默認參數、可變參數,關鍵字參數。
python2中,默認參數必須在可變參數之前
Python3參數順序:必選參數,默認參數,*args,**kwargs
python3中,*args也可以在默認參數前,誰在前誰優先拿到值
python2和python3相同的是:
1、必選參數必選在默認參數之前
2、關鍵字參數在最后
參考:
牛客網問題評論:https://www.nowcoder.com/questionTerminal/d899caec3dc54e60a9a238546e5b363a?toCommentId=2993542