[python]函數默認參數順序問題


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM