2016-11-24 107 views
0

我正在創建一個非常基本的匹配市場解決方案,它將用於博彩商店。我有一個看起來像這樣的功能:如何在python中跳過可選參數並直接調用* args

def create_market(name, match, providerID=str(uuid.uuid4()), market_kind=4, *market_parameters): 

我要調用一個函數,只有namematchmarket_parameters而跳過providerID,並market_kind(因爲這些都是可選)

請記住, *market_parameters將是一個將在函數內部發送的字符的元組。我拆開它像:

for idx, data in enumerate(args): 
    for k, v in data.iteritems(): 
     if 'nWays' in k: 
      set_value = v 

當我設置這個字典一樣

market_parameters = {'nWays' : 5} 

,並呼籲像create_market('Standard', 1, *market_parameters)

功能我似乎無法得到函數體裏面的數據。

我在做什麼錯?

+1

*「'* market_parameters'會是一個字典「* - 元組,用於位置參數; ''kwargs'將是字典。 – jonrsharpe

+0

@jonrsharpe是的,這是正確的:)我正要寫* market_parameters將是一個未知數的字典,將作爲列表(元組)傳遞到函數中。 – mutantkeyboard

回答

1

通過拆包像*market_parameters,你(在你的字典裏,如果你有多個值,然後爲providerIDmarket_kind等)發送解壓價值觀爲providerID

你可能需要

def create_market(name, match, *market_parameters, 
        providerID=str(uuid.uuid4()), market_kind=4): 

和調用功能,如:

create_market('Standard', 1, market_parameters) # you don't need to unpack it. 

,如果你想設置providerIDmarket_kind然後:

create_market('Standard', 1, market_parameters, providerID=your_provider_id, market_kind=your_market_kind) 
+0

是的。而已。謝謝@Yevhen Kuzmovych。你是一個拯救生命的人。 – mutantkeyboard

+0

@mutantkeyboard我不確定你想要做什麼,但[kwargs](http://stackoverflow.com/questions/1769403/understanding-kwargs-in-python)可以是有用的。 –