2013-04-11 18 views
6

Bir json yapılandırma dosyasında döngü yapmanın bir yolunu bulmaya çalışıyorum ve argüman adı olarak bir anahtar adı kullanarak ** kwargs kullanan bir yönteme geçin. Bir json yapılandırma dosyası oluşturdum ve anahtar isimlerini yöntemler olarak kullandım. Doğru yöntemi çağırmak için sadece "set_" anahtar adına ekliyorum. Json'u varsayılanlardan herhangi biriyle döngü yapmak için bir sözlüke dönüştürüyorum. Argüman isimlerini bir string değişkeniyle ** kwargs'e aktarmak istiyorum. Bir sözlük iletmeye çalıştım ama öyle görünmüyor. callable_method çağrıDize değişkeni ** kwargs adlı argümanı kullan argüman

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]) 

yukarıda kwarg gerçek adı olarak "seçenek_adı" geçer. "Shell" = option_name, argüman isminin dize adı olarak geçtiğinde bunu iletmek istiyorum. Bir örnek aşağıda. Bu şekilde, yapılandırmadaki herhangi bir anahtardan geçebilir ve bir şeyi başarmak için yazdığım herhangi bir yöntemde aradığım şey hakkında endişelenmem.

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

    ## Do things now with stuff 

Herhangi bir yardım

Yeni piton ve hala şeyler pythonic şekilde nasıl yapılacağını öğrenme duyuyorum takdir edilmektedir.

cevap

19

Sorduğunuzu doğru anlıyorsam, çete haline dönüştürülen bir dict komutunu iletmek için çağıran taraftaki ** sözdizimini kullanabilirsiniz.

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

Bu harika, tam da aradığım şey buydu. Hızlı cevabınız için teşekkür ederim. – lumberjacked