Speichern von Funktionen im Dictionary [Python]

8

Ich baue gerade eine Anwendung, wo ich über eine Reihe von Schritten, die weitgehend die gleiche Sache machen, iterieren müssen, eine sehr kleine Menge an Code (~ 15 Zeilen) speichern. Die Anzahl der Schritte hängt davon ab, wie das Projekt konfiguriert ist. Daher erscheint es mir ziemlich albern, für jede mögliche Instanz eine eigene Funktion zu erstellen.

In JavaScript würde ich so etwas tun:

%Vor%

Gibt es eine Möglichkeit, etwas Ähnliches in Python zu machen? Das einzige, woran ich denken kann, ist ungefähr so:

%Vor%

Das scheint einfach schrecklich ineffizient zu sein, wenn ich eine signifikante Anzahl von Schritten habe. Gibt es dafür einen besseren Weg?

    
Robert Ingrum 24.03.2015, 23:47
quelle

4 Antworten

2

Es sieht so aus, als gäbe es keine Möglichkeit, dies in Python zu tun, eine Designentscheidung, die absichtlich getroffen wurde, da sie als unpythonisch abgetan wurde. Naja, es sieht so aus, als würde ich die Methoden definieren und dann manuell zu einer Liste hinzufügen, um sie zu durchlaufen.

Quelle: Ссылка

    
Robert Ingrum 25.03.2015, 00:24
quelle
3

Sie können dies folgendermaßen tun:

%Vor%

Dies ist nur eine Möglichkeit. Es gibt viele andere. z.B. mit lambdas, dict wie du willst, etc.

Um lambdas zu verwenden, wenn Ihre Funktionen nur eine Zeile umfassen, können Sie Folgendes tun:

%Vor%     
Marcin 24.03.2015 23:55
quelle
1
%Vor%

Vereinfachter Code

%Vor%     
Malik Brahimi 25.03.2015 00:00
quelle
-1

Ich gehe typischerweise wie folgt vor. Ich mag diesen Ansatz, weil er dem Code ein Minimum an Tippaufwand hinzufügt. Wenn Sie später eine zusätzliche Methode schreiben, muss an keiner anderen Stelle in der Datei etwas geändert werden.

%Vor%

Jede Methode wird in Python automatisch in ein Dictionary geschrieben, und dir() ermöglicht uns den Zugriff darauf.

Haftungsausschluss. Es gibt mehrere Alarmglocken, die bei dem Anblick von "eval" im Kopf des durchschnittlichen Fußgaenger-Eiferers beginnen und einige sogar Anfälle haben. Lassen Sie sie sich vor eval schützen, indem Sie stattdessen einen Reflexionsmechanismus verwenden (der sie vielleicht weniger lesbar macht, aber immer noch wert ist, da ihnen nicht vorgeworfen werden kann, "eval" zu verwenden).

    
Evgeni Sergeev 13.02.2016 09:21
quelle