2013-04-11 50 views
6

我試圖找出一種方法來循環瀏覽json配置文件,並使用鍵名稱作爲參數名稱來使用** kwargs的方法。我創建了一個json配置文件,並使用鍵名作爲方法。我只是將「set_」附加到鍵名稱以調用正確的方法。我將json轉換爲字典以循環任何默認值。我想通過一個字符串變量將參數名稱傳遞給** kwargs。我試圖通過一本字典,但它似乎並不喜歡那樣。使用字符串變量** kwargs作爲命名參數

user_defaults = config['default_users'][user] 

for option_name, option_value in user_defaults.iteritems(): 
    method = "set_" + option_name 
    callable_method = getattr(self, method) 
    callable_method(user = user, option_name = user_defaults[option_name]) 

調用上面的callable_method傳遞「option_name」作爲kwarg的實際名稱。我想傳遞它,以便當「shell」= option_name時,它將作爲參數名稱的字符串名稱傳遞。下面是一個例子。通過這種方式,我可以通過配置中的任何按鍵進行循環,而不必擔心我爲了完成某些任務而寫的任何方法。

def set_shell(self, **kwargs): 
    user = kwargs['user'] 
    shell = kwargs['shell'] 

    ## Do things now with stuff 

任何幫助表示讚賞我是新來的python,仍然在學習如何做pythonic的方式。

回答

19

如果我正確理解你的要求,你可以在調用端使用**語法來傳遞一個轉換成kwargs的字典。

callable_method(user=user, **{option_name: user_defaults[option_name]}) 
+0

多數民衆贊成在這真棒,這正是我一直在尋找。感謝您及時的回覆。 – lumberjacked 2013-04-11 13:30:14