Python: jQuery-ähnliche Funktion verketten?

8

Ich konnte zu diesem Thema bei Google nichts finden, also denke ich, ich sollte es hier fragen:

Ist es möglich, Funktionen mit Python zu ketten, wie jQuery?

%Vor%

Ich verliere viel Platz und Lesbarkeit, wenn ich diesen Code schreibe:

%Vor%

Es scheint eine illusorische Bibliothek für die Schaffung solcher Funktionen zu geben, aber ich kann nicht verstehen, warum das so kompliziert aussehen muss ...

Danke!

    
Blender 03.12.2010, 06:17
quelle

5 Antworten

9

Hier ist eine Erweiterung von Simon's ListMutator Vorschlag:

%Vor%

Sie könnten noch einen Schritt weitergehen und ListMutator act mithilfe der Sammlungen abstrakte Basisklassen . In der Tat könnten Sie list selbst ableiten, obwohl es Sie möglicherweise daran hindern könnte, bestimmte Dinge zu tun, die Sie möglicherweise tun müssen ... und ich weiß nicht, was die allgemeine Meinung über die Unterklasse von eingebauten Typen wie list ist.

    
detly 03.12.2010, 08:02
quelle
10

Solange die Funktion einen Wert zurückgibt, können Sie sie verketten. In jQuery gibt eine Selektormethode normalerweise den Selektor selbst zurück, wodurch Sie die Verkettung durchführen können. Wenn Sie die Verkettung in Python implementieren möchten, können Sie Folgendes tun:

%Vor%

Ihr Problem scheint jedoch zu sein, dass Ihre Funktionsargumente zu eng sind. Chaining ist keine Lösung dafür. Wenn Sie Ihre Funktionsargumente verdichten möchten, weisen Sie die Argumente einfach den Variablen zu, bevor Sie sie an die Funktion übergeben:

%Vor%     
camel_space 03.12.2010 06:42
quelle
3

Wenn wir über Objektmethoden sprechen, dann ist es trivial, nur return self von jeder Methode. Auf der anderen Seite, wenn Sie ungebundene Funktionen ketten möchten, macht es nicht wirklich Sinn, sie so zu verketten, wie Sie wollen. Sicher, es sieht gut aus, aber es ist semantisch inkohärent, weil das "." steht für Objektattributzugriff und nicht für "Kette".

    
Simon 03.12.2010 06:24
quelle
1

Zukünftige Referenz: Werfen Sie einen Blick auf Moka , eine minimalistische funktionale Programmierung Bibliothek. Aus ihren Beispielen:

%Vor%     
Manuel Ebert 08.05.2012 12:47
quelle
0

Sehen Sie sich dies an. Es ist eine einfache Wrapper-Klasse zum Verketten. Und es implementiert einige der Funktionen von underscore.js lib. Sie umhüllen Ihre Liste, Tupel oder Diktat mit einem Unterstrich und spielen mit ihm. Dann erhalten Sie den Wert, indem Sie einen weiteren Unterstrich hinzufügen.

%Vor%

Ausgabe:

%Vor%     
wenjun.yan 18.07.2013 06:38
quelle

Tags und Links