1

我使用Python 3.6.0與兩個不同的參數數目(*參數)和參數的默認值功能?

考慮下面的代碼:

def foo(a, b='default-value', *args): 
    print('first argument=' + a) 
    print('default-value argument=' + b) 
    print('rest of arguments: ') 
    for arg in args: 
     print(arg) 

以下函數調用:

foo('arg1','arg2','arg3','arg4') 

結果與:

first argument=arg1 
default-value argument=arg2 
rest of arguments: 
arg3 
arg4 

但我預期:

first argument=arg1 
default-value argument=default-value 
rest of arguments: 
arg2 
arg3 
arg4 

是否有可能創建一個可同時接收不同數量的參數,並在Python默認值參數的函數?我如何達到我期待的結果?

+0

鑑於你的邏輯......究竟如何你希望能夠通過任何價值'B',如果你似乎希望它被忽略,因爲它已經有一個值? – deceze

+0

我認爲,在這種情況下,我只想把它傳遞明確,如:'FOO(「ARG1」,B =「東西」,「ARG2」,「ARG3」)' –

回答

1

的Python 3,你可以在函數定義*args後移至該關鍵字的說法,所以纔有了positionals捕獲由*args

def foo(a, *args, b='default-value'): 
    ... 

first argument=arg1 
default-value argument=default-value 
rest of arguments: 
arg2 
arg3 
arg4 
+0

感謝您的答覆!如果我也想使用'** kwargs',我會如何處理這個問題?例如。下面的簽名是不允許的:'def foo(a,* args,** kwargs,b ='default-value')' –

+0

@GrzegorzŚwirski一旦你有'kwargs'在那裏,你不需要設置一個默認值爲'b'。只要做到'kwargs.get(「B」,「默認值」)'在你的函數。 –

1

可以歸檔你通過把taht有defalt值作爲最後存在params參數要

def foo(a, *args, b='default-value'): 
    print('first argument=' + a) 
    print('default-value argument=' + b) 
    print('rest of arguments: ') 
    for arg in args: 
     print(arg) 

foo('arg1','arg2','arg3','arg4') 

結果:

first argument=arg1 
default-value argument=default-value 
rest of arguments: 
arg2 
arg3 
arg4