2016-04-19 4 views
0

Ich möchte eine Funktion auszuwählen, basierend auf dem Wert eines Wörterbuchs:Python wählen Sie eine Funktion auf den Wert in einem Wörterbuch basiert

dict = {"func_selector":"func1", "param_value":"some_value"} 

# defined a function 
def func1(param): 
    # some function code 

Nun möchte ich die Funktion wählen, basierend auf dem Wert eines Schlüssels so, dass es so etwas wie erreichen kann:

# calling a function based on some dict value 
dict["func_selector"](dict["param_value"]) 

Die Syntax ist wahrscheinlich falsch, aber ich frage mich, ob es möglich ist, ähnlich dem in Python oder etwas zu tun.

+3

übergeben können Warum speichern Sie nicht die Funktion selbst statt einer Zeichenfolge? 'dict = {" func_selector ": func1," param_value ":" irgendein_wert "}' – Delgan

Antwort

1

Versuchen Sie, den Wert der Funktion im Wörterbuch speichern, anstelle seines Namens:

def func1(param): 
    print "func1, param=%r" % (param,) 

d = {"func_selector":func1, "param_value": "some value"} 

Dann können Sie sagen:

>>> d['func_selector'](d['param_value']) 
func1, param='some value' 
+0

OP angegeben Python 3, 'print' fehlt Klammern –

1

Der beste Ansatz IMO tun, ist es, wie diese

def func1(param): 
    #code 

some_value = ... #The value you need 
my_dict = {"func_selector": func1, "param_value": some_value } 

Und dann

my_dict["func_selector"](my_dict["param_value"]) 

Nun, wenn Sie nur den Namen der Funktion müssen Sie getattr

nennen und nennen es

getattr(my_class, my_dict["func_selector"])(my_dict["param_value"]) 

my_class die Klasse, die die Methode enthält. Wenn es nicht in einer Klasse ist glaube ich, dass Sie self

+1

' self' ist nicht außerhalb von Klassen definiert, Sie könnten 'localhips()' verwenden oder 'globals()' stattdessen –

Verwandte Themen