2014-02-10 27 views
1

所以我真的不知道該怎麼說這個問題,或者我確信我可以只是谷歌它。參考數組中的對象的具體參數?

我有一個功能,如:

def example(parameter1 = "", parameter2 = "", parameter3 =""): 
    print(parameter1) 
    print(parameter2) 
    print(parameter3) 

而且我希望能夠,比如說,把它的3倍,並在一次只有一個參數傳遞,例如:

example(parameter1 = "Hello") 
example(parameter2 = "Stack") 
example(parameter3 = "Overflow") 

但在我的真實代碼中,我需要大量推廣這一點,並且有很多參數,所以我希望能夠做到以下幾點:

paramnames = ['parameter1', 'parameter2', 'parameter3'] 
parameters = ['Hello', 'Stack', 'Overflow'] 

for i in range(3): 
    example(paramnames[i] = parameters[i]) 

python有什麼辦法可以完成這個任務嗎?

回答

1

你在尋找什麼叫argument packing,並使用***表示位置和命名參數:

paramnames = ['parameter1', 'parameter2', 'parameter3'] 
parameters = ['Hello', 'Stack', 'Overflow'] 

for name, value in zip(paramnames, parameters): 
    example(**{name: value}) 

def example(parameter1="", parameter2="", parameter3=""): 
    print(parameter1) 
    print(parameter2) 
    print(parameter3) 

請記住,如果一個參數沒有通過,這將是默認。所以輸出:

Hello 



Stack 



Overflow 
+0

這是完美的。謝謝。 –

1

使用dict**符號:

parameters = {'parameter1': 'Hello', 
       'parameter2': 'Stack', 
       'parameter3': 'Overflow'} 

for k, v in parameters.items(): 
    example(**{k: v}) 

如果您需要保留順序,爲什麼不使用這樣的字典使用OrderedDict

0

paramnames = ['parameter1', 'parameter2', 'parameter3'] 
parameters = ['Hello', 'Stack', 'Overflow'] 

for i in range(3): 
    example({paramnames[i] : parameters[i]}) 

和:

def example(para_dict): 
    for k,v in para_dict.items(): 
     print(v) 

,如果你想使用deffrent代碼每一個參數,你可以在測試「K」

0

有幾個方法可以做到這一點。

最直接的辦法可能是使用字典來保存參數將它們全部通過使用example(**param_dict)功能之前。

更加「花哨」的方法是使用functools.partial與事先確定一些參數的可調用對象。你可以像example = partial(example, parameter1="hello")那樣添加參數,然後在最後調用example()。如果參數來自許多不同的地方,並且您需要將函數的參數保留一段時間(如回調函數),則此方法可能非常有用。