In Python ist Einzeiler schwer zu machen, aber nicht unmöglich. Ich denke, dass der Grund, warum Einzeiler in Python schwierig ist, darin besteht, dass nur wenige Dinge ausgedrückt werden können und dass zusammengesetzte Anweisungen nicht in einer Zeile geschrieben werden können. Hier werden wir eine Methode zum Einbeziehen verschiedener Prozesse in einen Ausdruck vorstellen.
if a: f ()
kann als a und f ()
geschrieben werden. wenn nicht a: f ()
kann als a oder f ()
geschrieben werden.
(Wenn Sie mit dem Kurzschluss logischer Operatoren nicht vertraut sind, lesen Sie bitte http://qiita.com/gyu-don/items/a0aed0f94b8b35c43290.)
Außerdem hat der ternäre Operator eine etwas unangenehme Syntax. true_value wenn Bedingung sonst false_value
Sie können mehrere Ausdrücke zu einem Ausdruck kombinieren, indem Sie ein Taple oder eine Liste erstellen. Sie können den Wert auch an einer bestimmten Stelle abrufen, indem Sie mit [0] oder [-1] am Ende darauf verweisen.
Schleifen sind in Listeneinschlussnotation.
Insbesondere in Python3 werden Generatorobjekte überall angezeigt. Der Unterschied zwischen einer Liste und einem Generator ist wichtig, insbesondere wenn Sie Nebenwirkungen erwarten. Die Listeneinschlussnotation erstellt eine Liste bis zum letzten Element im laufenden Betrieb. Andererseits wertet der Generator nicht jedes Element aus, bis es von next () aufgerufen wird. Um jedes Element auszuwerten, können Sie entweder als Nächstes selbst aufrufen, list (gen) verwenden oder die Notation zur Aufnahme von Listen für ... in verwenden.
lambda Sie können mit Lambda anonyme Funktionen erstellen, in Python können Sie jedoch nur anonyme Funktionen mit einem einzigen Ausdruck erstellen.
Sie können Lambda verwenden, um Variablen zu binden, ohne eine Anweisung abzugeben. Bitte verwenden Sie es in Situationen, in denen es schwierig ist, Semikolon zu verwenden. "(Lambda a, b: a + b) (f (), g ())" realisiert "a = f (); b = g (); a + b".
In Python sind Zuweisungen Anweisungen, in list.append jedoch Ausdrücke. Es kann nützlich sein, eine Liste im Argument zu haben.
Beispiel: Ein Ausdruck, der das Ergebnis der Addition von 0 auf 100 zurückgibt, ohne Summe oder Reduktion zu verwenden
(lambda t: [t.append(t.pop()+x)or t[0] for x in range(101)][-1])([0])
Sie müssen keinen komplizierten Y-Kombinator erstellen, sondern nur die Funktion, um ein Argument zu erhalten, das sich selbst empfängt.
Beispiel: 1 bis 10 Stockwerke
(lambda f: f(10,f))(lambda n,f: n*f(n-1,f) if n>0 else 1)
Ende.
Recommended Posts