最近學習python,學到了函數傳參,看到了以下這個特殊情況,特此來做個筆記
def add(*, x, y):
print(x, y)
以上函數定義后,該怎么傳參?前面的那個*號是做什么用的?
我們可不可以照以下方式 傳參?
add(5, 6, 7),這樣傳參可不可以?會不會有錯?
我們來看結果
提示參數過多,看來這樣傳參不對
看來這樣也不行
這樣也不可以,那怎么傳才對呢?按道理上面的傳法應該是正確的為什么還報錯?
這次終於對了,為什么呢,因為定義函數參數時候,如果定義了位置參數,並且在最前面加了*號,那么位置參數就必須以關鍵字的方式傳參了,否則就會報錯了。
來看下變種
def add(x, *, y, z):
print(x, y, z)
以上參數該怎么傳?
add(5)可以嗎?
提示缺少2個參數, y z並且要求是關鍵字參數,那么第一個參數是正確的,只是缺少參數
這次可以了,由此可見,*號后面的參數必須以關鍵字傳參,*號前面是正常的位置參數,那么我們想下*args前后是不是也是這個道理呢?