Wir übersetzen weiterhin eine Reihe von Artikeln über Analoga in Python und JavaScript
In früheren Versionen haben wir uns auf die Syntax klassischer Versionen von Python (2.7) und JS basierend auf ECMAScript 5 verlassen. Dieses Mal werden wir die neuen Funktionen verwenden, die in Python 3.6 und JS des ECMAScript 6-Standards erschienen sind.
ECMAScript 6 ist ein relativ neuer Standard, der von den meisten modernen Browsern unterstützt wird . Um Standard 6 in älteren Browsern verwenden zu können, muss Babel moderne JS6-Designs in die browserübergreifende Unterstützung übersetzen.
Im heutigen Artikel: Variablen in Strings, Entpacken von Listen, Lambda-Funktionen, Iteration ohne Indizes, Generatoren und Mengen.
Inhalt anderer Ausgaben:
- Der erste Teil - Typkonvertierung, ternärer Operator, Zugriff auf eine Eigenschaft nach Eigenschaftsname, Wörterbücher, Listen, Zeichenfolgen, Zeichenfolgenverkettung
- Der zweite Teil ist die Serialisierung von Wörterbüchern, JSON, Regulars, Fehlern und Ausnahmen.
- Dieser Artikel
- Der vierte Teil besteht aus Funktionsargumenten, die Klassen, Vererbung, Setter-Getter und Klasseneigenschaften erstellen und damit arbeiten.
Variablen in Zeilen
Die traditionelle Methode zum Erstellen von Zeichenfolgen mit Variablen verwendet die Verkettung von Zeichenfolgen und Variablen:
name = 'World' value = 'Hello, ' + name + '!\nWelcome!'
Eine solche Aufzeichnung scheint verstreut und schlecht gelesen zu sein, und Sie können häufig Fehler in den Räumen machen, die die Wörter in den Zeilen umgeben.
Ab Version 3.6 in Python und in JS ECMAScrip6 können Sie die Zeichenfolgeninterpolation oder in Python-Begriffen f-Zeichenfolgen verwenden. Dies sind Zeichenfolgenmuster, in denen Werte aus Variablen ersetzt werden.
In Python werden f-Zeilen vor Anführungszeichen mit einem f markiert:
name = 'World' value = f"""Hello, {name}! Welcome!""" price = 14.9 value = f'Price: {price:.2f} €'
In JS beginnen und enden Zeichenfolgenmuster mit einem Backtrick `
name = 'World'; value = `Hello, ${name}! Welcome!`; price = 14.9; value = `Price ${price.toFixed(2)} €`;
Beachten Sie, dass Muster sowohl einzeilig als auch mehrzeilig sein können.
In Python können Sie die Formatierung von Variablen festlegen.
Listen auspacken
In Python und jetzt in JS gibt es eine interessante Möglichkeit, Sequenzelemente verschiedenen Variablen zuzuweisen. Zum Beispiel können wir drei Variablen drei Werte aus der Liste zuweisen:
[a, b, c] = [1, 2, 3]
Bei Tupeln können Klammern weggelassen werden.
Das folgende Beispiel ist in Python sehr beliebt, um die Werte zweier Variablen auszutauschen:
a = 1 b = 2 a, b = b, a
In JS6 + ist es auch möglich:
a = 1; b = 2; [a, b] = [b, a];
Wenn wir in Python eine unbestimmte Anzahl von Elementen in einer Liste oder einem Tupel haben, können wir diese Elemente einem Tupel von Variablen zuweisen, in denen die letzten Werte als Liste zurückgegeben werden:
first, second, *the_rest = [1, 2, 3, 4]
Das gleiche kann in JS (ECMAScrip6) gemacht werden:
[first, second, ...the_rest] = [1, 2, 3, 4];
Lambda-Funktionen
Sowohl Python als auch JS verfügen über ziemlich klare Funktionen zum Erstellen einzeiliger Funktionen. Solche Funktionen werden Lambda-Funktionen genannt. Lambdas sind Funktionen, die ein oder mehrere Argumente annehmen und einen berechneten Wert zurückgeben. In der Regel werden Lambda-Funktionen verwendet, wenn Sie eine Funktion als Rückruf auf eine andere Funktion übertragen müssen oder wenn jedes Element der Sequenz verarbeitet werden muss.
In Python können Sie eine Lambda-Funktion mit dem Schlüsselwort lambda
:
sum = lambda x, y: x + y square = lambda x: x ** 2
JS verwendet die Notation =>
. Wenn es mehr als ein Argument gibt, werden sie in Klammern gesetzt:
sum = (x, y) => x + y; square = x => Math.pow(x, 2);
Iteration ohne Indizes
Bei vielen PLs können Sie Arrays nur umgehen, indem Sie über die Indexnummer auf ein bestimmtes Element zugreifen und mit dem Inkrement dieses Index zyklisieren.
for (i=0; i<items.length; i++) { console.log(items[i]); }
Dies ist keine sehr schöne Platte und für Anfänger etwas kompliziert - eine solche Platte sieht nicht natürlich aus. Python hat eine schöne, prägnante Möglichkeit, die Liste zu umgehen:
for item in ['A', 'B', 'C']: print(item)
In modernen JS wird dies mit dem for..of
Operator implementiert:
for (let item of ['A', 'B', 'C']) { console.log(item); }
Sie können die Zeile in Python auch zeichenweise umgehen:
for character in 'ABC': print(character)
Und in modernem JavaScript:
for (let character of 'ABC') { console.log(character); }
Generatoren
Sowohl in Python als auch in modernem JS können Sie spezielle Funktionen definieren, die wie Iteratoren aussehen. Bei jedem Aufruf (Iteration) geben sie den nächsten generierten Wert aus der Sequenz zurück. Solche Funktionen werden Generatoren genannt.
Generatoren werden normalerweise verwendet, um Folgendes zu erhalten: Zahlen aus einem Bereich, Zeilen aus einer Datei, Daten Seite für Seite von einer externen API, Fibonacci-Zahlen und andere dynamisch generierte Sequenzen.
Technisch gesehen sehen Generatoren wie normale Funktionen aus, aber anstatt einen einzelnen Wert zurückzugeben (und die Arbeit zu stoppen), geben sie einen einzelnen Wert zurück und unterbrechen die Operation bis zum nächsten Aufruf. Sie generieren bei jedem Aufruf die folgenden Werte aus der Liste, bis das Ende der Liste erreicht ist.
Stellen Sie sich ein Beispiel in Python vor, in dem der Countdown () - Generator erstellt wird, der Zahlen von einer bestimmten Zahl in umgekehrter Reihenfolge auf 1 zurückgibt (10,9,8, ..., 1):
def countdown(counter): while counter > 0: yield counter counter -= 1 for counter in countdown(10): print(counter)
Das gleiche kann in modernen JS erhalten werden, aber beachten Sie * in der Beschreibung der Funktion. Dies definiert sie als Generator:
function* countdown(counter) { while (counter > 0) { yield counter; counter--; } } for (let counter of countdown(10)) { console.log(counter); }
Sets
Wir haben bereits Listen (Listen), Tupel (Tupel), Arrays (Arrays) kennengelernt. Es gibt aber noch eine andere Art von Datensätzen. Sets sind Datenarrays, in denen jedes eindeutige Element nur in einer einzigen Kopie vorhanden ist. Die Mengenlehre definiert Operationen mit Mengen als Vereinigung, Schnittmenge und Differenz, aber wir werden sie jetzt nicht betrachten.
Wir erstellen eine Menge, fügen ein Element hinzu, überprüfen die Existenz des Elements, ermitteln die Gesamtzahl der Elemente, gehen die Menge nach Elementen um und löschen ein Element mit Python:
s = set(['A']) s.add('B'); s.add('C') 'A' in s len(s) == 3 for elem in s: print(elem) s.remove('C')
Gleiches gilt für JS:
s = new Set(['A']); s.add('B').add('C'); s.has('A') === true; s.size === 3; for (let elem of s.values()) { console.log(elem); } s.delete('C')
Zusammenfassend
- Zeichenfolgenmuster (F-Zeilen) können die Lesbarkeit verbessern und den Code vereinfachen, selbst bei mehrzeiligen Objekten.
- Sie können Arrays, Gruppen oder Zeichenfolgen umgehen, ohne Indizes zu verwenden.
- Mit Generatoren können Sie Sequenzen mit einer nahezu unbegrenzten Anzahl von Elementen erhalten.
- Die Verwendung von Sets erleichtert die Überprüfung der Eindeutigkeit eines Elements in einem Array.
- Verwenden Sie Lambdas, wenn Sie kleine einzeilige Funktionen benötigen.
Im nächsten Teil werden wir über Funktionsargumente, Klassen, Vererbung und Eigenschaften sprechen.