Python dynamische Funktionsnamen
Ich bin auf der Suche nach einem besseren Weg, um die Funktionen aufrufen, die basierend auf eine variable in Python vs mit if/else-Anweisungen wie unten. Jeder status code hat eine entsprechende Funktion
if status == 'CONNECT':
return connect(*args, **kwargs)
elif status == 'RAWFEED':
return rawfeed(*args, **kwargs)
elif status == 'RAWCONFIG':
return rawconfig(*args, **kwargs)
elif status == 'TESTFEED':
return testfeed(*args, **kwargs)
...
Ich nehme an, dies erfordert eine Art von Fabrik Funktion, sind jedoch unsicher, wie die syntax
InformationsquelleAutor der Frage drjeep | 2009-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den kanonischen Weg, dies zu tun ist, um ein Wörterbuch zu emulieren
switch
oderif/elif
. Finden Sie mehrere Fragen zu ähnlichen Problemen hier SO.Setzen Sie Ihre Funktionen in ein Wörterbuch mit Ihren status-codes als Schlüssel:
InformationsquelleAutor der Antwort
finden Sie vielleicht
getattr
nützlich, denke ichInformationsquelleAutor der Antwort SilentGhost
unter der Annahme, dass diese Funktionen gehören zu einigen Modul:
InformationsquelleAutor der Antwort vartec
es die Nähte, die Sie verwenden können, getattr in einer etwas anderen (meiner Meinung nach elegantere)
oder, wenn-Funktion importiert wird, wie unten
Sünde ist nun im namespace, so können Sie es nennen von
InformationsquelleAutor der Antwort to-chomik
Einige Verbesserungen, um SilentGhost Antwort:
wenn Sie möchten, rufen Sie die Funktion definiert, die im aktuellen Modul.
Obwohl es hässlich aussieht. Ich würde die Lösung mit dictionary.
InformationsquelleAutor der Antwort Eugene Morozov
Schau mal hier: getattra als dispatcher-Funktion
InformationsquelleAutor der Antwort hasen
Ich hatte das gleiche problem früher. Haben Sie einen Blick auf diese Frage, denke ich, seine, was Sie suchen.
Wörterbuch oder If-Anweisungen
Hoffe, das ist hilfreich
Eef
InformationsquelleAutor der Antwort RailsSon
einige Veränderungen gegenüber:
InformationsquelleAutor der Antwort linjunhalida