2017-07-03 34 views
-2

我有一個關於* args和** kwargs的問題。我知道當你不知道有多少參數傳遞給函數時會使用它們。但是,如果我不知道那些是什麼,它可以替代一些實際需要的論據嗎?使用* args和** kwargs代替函數的參數

如果有一個函數:

def functionName(a, b): 
    ...some code... 
    doSomethingUsing(a) 
    doSomethingUsing(b) 

如果我沒有什麼論據並不功能可以拿我只是使用functionName(* ARGS,** kwargs) - 或使用functionName(*參數)?我注意到有些人傾向於這樣使用它 - 但我不確定這是如何*和**在Python中工作?

+0

調用'functionName(* args)'是* unpacking *任何'args'到'functionName'中。 –

+0

你可以看看彼得霍夫曼的回答https://stackoverflow.com/a/36908/6683117 –

+0

這個問題不清楚,可能是重複的。這聽起來像你只是想在函數中拋出任意的參數,它應該神奇地知道它需要什麼。你總是要知道一個函數需要什麼參數,你還能確定你正確地使用了它嗎?請澄清你想達到的目標。 – skrx

回答

0

調用function(*args)相當於function(arg[0], arg[1],...,arg[N])

如果你不知道函數需要什麼樣的參數,只需要調用它,並期待在異常:

>>> def f(a,b,c): 
...  pass 
... 
>>> f() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() missing 3 required positional arguments: 'a', 'b', and 'c' 

或者你可以使用交互式help

>>> help(f) 
Help on function f in module __main__: 

f(a, b, c) 
0

是的,你可以同時使用* args和** kwargs,但是訂單很重要,你可以有想法here。如果你想使用全部兩個這些函數,則順序是

some_func(*args,**kwargs) 
相關問題