自動我打電話的功能如何通過大量的關鍵字參數在python
foo(x,y0=y[0],y1=y[1],y2=y[2],...,y<d>=y[<d>])
其中<d>
是大量可從呼叫改變調用。除x外的所有參數都是關鍵字參數。 我自己並沒有寫foo
,所以我不能僅僅將y
作爲列表。有沒有一種自動的方式將列表分成關鍵字參數?
自動我打電話的功能如何通過大量的關鍵字參數在python
foo(x,y0=y[0],y1=y[1],y2=y[2],...,y<d>=y[<d>])
其中<d>
是大量可從呼叫改變調用。除x外的所有參數都是關鍵字參數。 我自己並沒有寫foo
,所以我不能僅僅將y
作爲列表。有沒有一種自動的方式將列表分成關鍵字參數?
首先,建立名稱,值對的列表,然後將其轉換成一個字典,並把它傳遞給功能。
y_vals = [ 1, 2, 3, 'a', 'b', 'c' ]
arg_dict = dict(('y%d' % i, v) for i, v in enumerate(y_vals))
foo(x, **arg_dict)
使用*
傳遞解壓的參數從列表中,您可以在正常的參數發送代替關鍵字參數,只要確保你通過他們在正確的順序,如:
def foo(x, y1=None, y2=None, y3=None, y4=None, ... , yN=None):
# func stuff
您可以通過一個列表功能解壓,如:
arguments = ["arg-y1", "arg-y2", "arg-y3", ... , "arg-yN"]
foo (x, *arguments)
因爲它們是關鍵字參數,他們都會有一些默認值。 如果你想傳遞只有幾個特定的值,你可以使用千瓦的Dictionary
和**
:
kwargs = {"y1": "arg-y1", "y3": "arg-Y3" }
foo (x, **kwargs)
您可以使用**kwargs
讓你的函數使用的關鍵字參數的任意數量(「kwargs」是指「關鍵字參數」):
>>> def print_keyword_args(**kwargs):
... # kwargs is a dict of the keyword args passed to the function
... for key, value in kwargs.iteritems():
... print "%s = %s" % (key, value)
...
>>> print_keyword_args(first_name="John", last_name="Doe")
first_name = John
last_name = Doe
您還可以調用函數時使用**kwargs
語法通過構建的參數的字典,並把它傳遞給你的函數:
>>> kwargs = {'first_name': 'Bobby', 'last_name': 'Smith'}
>>> print_keyword_args(**kwargs)
first_name = Bobby
last_name = Smith
的Python Tutorial包含了一個很好expla它的工作原理以及一些很好的例子。
對於你的情況,以列表轉換爲關鍵字參數:
# y is a list with arguments stored.
kwargs = {}
for arg in range(len(y)):
kwargs['y'+str(arg)] = y[arg]
foo(**kwargs)
這可以更加簡潔一點的字典理解:'arg_dict = { 'Y%d' %I:v對於I,V在枚舉(y_vals)}' –
正確。我的大腦的一部分仍然是2.5兼容的。 – cco
這正是我所尋找的。美麗! – Bananach