Analoge in Python und JavaScript. Teil eins

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels "Äquivalente in Python und JavaScript. Teil 1" .


Trotz der Tatsache, dass Python und Javascript sehr unterschiedlich sind, gibt es viele Ähnlichkeiten, die jeder Full-Stack-Entwickler kennen sollte. In dieser Reihe von 4 Artikeln werden wir sehen, was in beiden Sprachen gemeinsam ist, und eine Reihe bekannter Probleme sowie Möglichkeiten zu deren Lösung betrachten.


Dies ist keine Referenz, es gibt keine grundlegenden Informationen zu den Arten von Variablen, ifs und Schleifen.
Wir werden uns jedoch komplexere Datenstrukturen und Operationen mit Python und Javascript ansehen.


Ich werde dies auch anhand praktischer Beispiele veranschaulichen.


Diese Serie ist für Backder von Interesse, die Django, Flask oder ein anderes Python-Framework verwenden, das mehr über modernes Javascript erfahren möchte. Auf der anderen Seite sind diese Artikel für Spitzenreiter nützlich, die besser verstehen möchten, wie das Backend funktioniert, oder sogar ihre Website auf Django schreiben möchten.


Andere Artikel in dieser Reihe:


  1. Teil zwei : JSON, Stammgäste, Ausnahmefehler
  2. Dritter Teil : Modernes Python und JS: String-Muster (F-Strings), Listenentpacken, Lambda-Funktionen, Listeniterationen, Generatoren, Mengen.
  3. Der vierte Teil besteht aus Funktionsargumenten, die Klassen, Vererbung, Setter-Getter und Klasseneigenschaften erstellen und damit arbeiten.

Typ gegossen


Beginnen wir damit, den String auf das Ganze zu übertragen. In Python ist alles einfach und unkompliziert:


number = int(text) 

Aber in JS müssen Sie erklären, zu welchem ​​System Sie führen werden - dezimal, oktal, hexadezimal oder binär:


 number = parseInt(text, 10); 

Um das übliche Dezimalsystem zu verwenden, übergeben wir 10 als zweites Argument an die Funktion parseInt (). 8 für Oktal, 16 für Hex oder 2 für Binär. Wenn der zweite Parameter weggelassen wird, beginnt die Zahl bei Null und Sie verwenden einen veralteten Browser. Die Zeile mit dem Text wird als Oktalsystem interpretiert:


 parseInt('012') == 10 //     parseInt('012', 10) == 12 

Bedingte Zuordnung


Obwohl Python und JS hierfür unterschiedliche Syntax verwenden, ist diese Operation in beiden Sprachen beliebt. Es ist beliebt, weil es in einem Ausdruck möglich ist, unterschiedliche Werte für True- und False-Fälle zuzuweisen.
Ab Python 2.7 sieht die bedingte Zuweisung folgendermaßen aus:


 value = 'YES' if positive == True else 'NO' 

In JavaScript erfolgt die bedingte Zuweisung mit einem ternären Operator ? sowie in C, C ++, C #, Java, Ruby, PHP, Perl, Swift und ActionScript:


 value = positive === true? 'YES': 'NO'; 

Greifen Sie über den Eigenschaftsnamen auf eine Objekteigenschaft zu


Die übliche Methode zum Zugriff auf eine Objekteigenschaft in Python und JS ist dieselbe:


 obj.color = 'YELLOW' 

Was aber, wenn der Eigenschaftsname in einer Zeichenfolgenvariablen eingeschlossen ist? Der Name der Eigenschaft kann beispielsweise aus der Liste der Eigenschaften abgerufen werden, oder der Name der Eigenschaft besteht aus zwei Zeichenfolgenvariablen: "title" + land_code .
In Python gibt es dafür die Funktionen getattr() und setattr() :


 attribute = 'color' value = getattr(obj, attribute, 'GREEN') setattr(obj, attribute, value) 

In JS können Sie ein Objekt wie ein Wörterbuch behandeln und den Eigenschaftsnamen in eckigen Klammern übergeben:


 attribute = 'color'; value = obj[attribute] || 'GREEN'; obj[attribute] = value; 

Um den Standardwert zu erhalten, wenn eine Eigenschaft mit demselben Namen nicht vorhanden ist, verfügt die Funktion getattr() in Python über einen dritten Parameter. Wenn in JS die angeforderte Eigenschaft fehlt, gibt die Funktion undefined . Es kann mit dem Operator OR mit dem Standardwert verglichen werden - dies ist in JS Standard - diese Methode ist in vielen Frameworks und Bibliotheken zu finden.


Schlüsselwörterbuchzugriff


Ähnlich wie oben. Der Schlüssel wird in beiden Sprachen standardmäßig in eckigen Klammern angegeben:


 dictionary = {} dictionary['color'] = 'YELLOW' 

Python verwendet die Standardsyntax mit eckigen Klammern für den Schlüsselzugriff. Wenn jedoch kein solcher Schlüssel vorhanden ist, wird eine KeyError .
Flexibler ist die Methode get() , die None wenn kein Schlüssel vorhanden ist. Sie können auch einen Wert übergeben, der zurückgegeben wird, wenn der Schlüssel fehlt:


 key = 'color' value = dictionary.get(key, 'GREEN') 

In JS können Sie denselben Trick wie mit einer Objekteigenschaft ausführen - OR mit einem Standardwert:


 key = 'color'; value = dictionary[key] || 'GREEN'; 

Slices: Listen und Strings


Python hat einen Operator [:] um einen Teil einer Liste, eines Tupels oder ähnlicher Strukturen abzurufen. Ein Beispiel mit einem Objekt vom Typ Django QuerySets :


 items = [1, 2, 3, 4, 5] first_two = items[:2] # [1, 2] last_two = items[-2:] # [4, 5] middle_three = items[1:4] # [2, 3, 4] 

JS hat eine slice() -Methode mit dem gleichen Effekt:


 items = [1, 2, 3, 4, 5]; first_two = items.slice(0, 2); // [1, 2] last_two = items.slice(-2); // [4, 5] middle_three = items.slice(1, 4); // [2, 3, 4] 

Aber verwechseln Sie nicht die splice() -Methode, die das ursprüngliche Array ändert!


In Python gilt der Operator [:] auch für Zeichenfolgen:


 text = 'ABCDE' first_two = text[:2] # 'AB' last_two = text[-2:] # 'DE' middle_three = text[1:4] # 'BCD' 

In JS haben Zeichenfolgen auch eine slice() -Methode:


 text = 'ABCDE'; first_two = text.slice(0, 2); // 'AB' last_two = text.slice(-2); // 'DE' middle_three = text.slice(1, 4); // 'BCD' 

Operationen auflisten


Bei der Programmierung müssen Sie häufig eine Folge von Elementen sammeln und analysieren. In Python werden hierfür normalerweise Listen und in Javascript Arrays verwendet. Sie haben eine ähnliche Syntax und Operationen, aber unterschiedliche Methoden zum Hinzufügen und Entfernen von Elementen.


Wir verbinden die beiden Listen, fügen ein Element am Ende hinzu, fügen ein Element am Anfang hinzu, holen und löschen das Element am Anfang, holen und löschen das Element am Ende und löschen das spezifische Element nach Index.
Python:


 items1 = ['A'] items2 = ['B'] items = items1 + items2 # items == ['A', 'B'] items.append('C') # ['A', 'B', 'C'] items.insert(0, 'D') # ['D', 'A', 'B', 'C'] first = items.pop(0) # ['A', 'B', 'C'] last = items.pop() # ['A', 'B'] items.delete(0) # ['B'] 

Gleiches in Javascript:


 items1 = ['A']; items2 = ['B']; items = items1.concat(items2); // items === ['A', 'B'] items.push('C'); // ['A', 'B', 'C'] items.unshift('D'); // ['D', 'A', 'B', 'C'] first = items.shift(); // ['A', 'B', 'C'] last = items.pop(); // ['A', 'B'] items.splice(0, 1); // ['B'] 

Verbinden Sie Sätze von Zeichenfolgen


Kombinieren Sie eine Reihe von Zeichenfolgenelementen zu einer einzelnen Zeile, indem Sie ein Leerzeichen, ein Komma oder eine neue Zeile als Verbindungszeichen verwenden.


In Python wird hierfür die string join() -Stringmethode verwendet, die eine Liste oder ein Tupel als Argument verwendet. Für Uneingeweihte (in Python-Syntax) mag es seltsam erscheinen, einen Ausdruck mit einem Trennzeichen zu beginnen, aber nach regelmäßiger Verwendung werden Sie sich an diese Form der Notation gewöhnen:


 items = ['A', 'B', 'C'] text = ', '.join(items) # 'A, B, C' 

In JS haben Arrays eine join() -Methode mit einem Trennzeichen als Argument:


 items = ['A', 'B', 'C']; text = items.join(', '); // 'A, B, C' 

Zusammenfassend


  • Listen und Tupel in Python entsprechen Arrays in Javascript.
  • Wörterbücher in Python entsprechen Objekten in Javascript.
  • Strings in Python ähneln Strings in Javascript.
  • Setzen Sie in Javascript eine Zeichenfolge sorgfältig in eine Zahl um und merken Sie sich dabei die Zahlensysteme.
  • Einzeilige bedingte Ausdrücke existieren in ihren Sprachen.
  • Die Kombination von String-Sequenzen ( ' '.join ) in Python entmutigt die Uneingeweihten in der Syntax, aber Sie gewöhnen sich schnell daran.

In der nächsten Serie beschäftigen wir uns mit dem Erstellen und Parsen von JSON, regulären Ausdrücken sowie dem Umgang mit Fehlern und Ausnahmen!

Source: https://habr.com/ru/post/de416617/


All Articles