Ich hatte das Gefühl, dass ich den Python-Code nach C ++ 98 portiert habe.

Auch wenn es in Python präzise geschrieben werden kann, ist es notwendig, eine große Menge an Vorlagencode in C ++ 98 zu schreiben. Als Referenz (?) Habe ich den C ++ - und Python-Code nebeneinander angeordnet.

Kurz gesagt: "Dynamisches Tippen mit Syntaxzucker ist wunderbar."

(Da es gerade geschrieben wird, wird es möglicherweise in Zukunft weitere Elemente geben.)

Teil 1 Statische / dynamische Eingabe

Point get_distance(const Point& point1, const Point& point2) {
  return sqrt( pow(point1.x - point2.x, 2) + pow(point1.y - point2.y, 2);
}
def get_distance(point1, point2):
  pt1_x, pt1_y = point1
  pt2_x, pt2_y = point2
  return math.sqrt((pt1_x - pt2_x) ** 2, (pt1_y - pt2_y) ** 2)

C ++: Zusätzlich zu Typen sind Modifikatoren wie const, * und &, Vorlagen problematisch. (Obwohl die Eingabe / Ausgabe angegeben ist und die Syntaxprüfung beim Kompilieren hilfreich ist ...) Python: Dynamisch typisiert, keine Typdefinition erforderlich. Der Typ hat einen Wert, keine Variable.

Teil 2 Liste und Wörterbuch

vector<double> calculate(const vector<Line>& lines) {
  vector<double> result;
  vector<Line>::const_iterator ite = lines.begin();
  while( ite != lines.end() ) {
    double value =Etwas tun(*ite);
    result.push_back(value);
    ++ite;
  }
  return result;
}
def calculate(lines):
  result = [] // []Im Listenformat, {}Wörterbuch.
  for line in lines:
    value =Etwas tun(line)
    result.append(value)
  return result

C ++: In C ++ 98 gibt es keinen Syntaxzucker (C ++ 11 hat Syntaxzucker).

Python: Objekterstellung, Elementzugriff, Schleifen mit Syntaxzucker. Der obige Fall kann unter Verwendung der Listeneinschlussnotation genauer beschrieben werden.

def calculate(lines):
  result = [Etwas tun(line) for line in lines]
  return result

Teil 3 Taple


void foo() {
  Point pt1(0,1);
  Point pt2(0,5);
  Line line(pt1, pt2);

  double score;
  double distance;
  calculate(line, &score, &distance); 
  ...
}

void calculate(const Line& line, double* out_score, double* out_distance) {
  *out_distance = get_distance(line.point1, line.point2);
  *out_score = get_score(line);
}

double get_distance(const Point& pt1, const Point& pt2) {...}


def foo():
  pt1 = (0,1)
  pt2 = (0,5)
  line = (pt1, pt2)
  distance, score = caclculate(line)
  ...

def calculate(line):
  distance = get_distance(*line)
  score = get_score(line)
  return distance, score

def get_distance(pt1, pt2):
  ...

C ++: Wenn Sie Werte gruppieren möchten, müssen Sie ein generisches Paar verwenden oder eine Struktur / Klasse wie Punkt oder Linie definieren. Dies ist auch ein Kompromiss bei der Syntaxprüfung.

Python: Taple ist praktisch, wenn Sie ein kleines Paar als Argument übergeben möchten. Übermäßiger Gebrauch verringert die Lesbarkeit.

Teil 4 Lambda-Typ

void foo(const Line& line, double x) {
  double y1 = func(line, x);
  double y2 = func(line, x+1);
}

//Suchen Sie die y-Koordinate, die x entspricht, auf der geraden Linie.
// ※:y=1 oder x=Berücksichtigen Sie keine Zeilen wie 0.
double func(const Line& line, double x) {
   //Neigung bekommen
   double slope = get_slope(line.point1, line.point2);
   double const_value = get_const_value(line.point1, slope);
   double y = x * slope + c;
   return y;
}

def foo(line, x):
  func = get_func(line)
  y1 = func(x)
  y2 = func(x + 1)

def get_func(line):
  slope = get_slope(*line)
  const_value = get_const_value(line[0], slope)
  return (lamda x: x * slope + c)

Lambda-Ausdrücke werden in Python bereitgestellt, sodass Sie problemlos kleine Dinge schreiben können. In C ++ verbessert das Schreiben einer Klasse die Wiederverwendbarkeit, aber der Schwellenwert für das Schreiben ist hoch.

Teil 5 Funktionsaufruf

Sie können Taples und Listen einfach in einzelne Argumente erweitern oder benannte Argumente erstellen.

Beispiel: Reduzieren Sie die Überlastung der C ++ - Funktion.

doule get_distance(const Point& pt1, const Point pt2) {
   return //Berechnungsergebnis
}

double get_distance(const Line& line) {
  return get_distance(line.point1, line.point2);
}
def get_distance(point1, point2):
  return ...

def foo(line):
  get_distance(*line) //Wenn die Linie ein Taple oder eine Sequenz ist, zeigt Punkt1 automatisch,Erweitern Sie auf Punkt2.

Recommended Posts

Ich hatte das Gefühl, dass ich den Python-Code nach C ++ 98 portiert habe.
Ich möchte C ++ - Code aus Python-Code erstellen!
mong - Ich habe versucht, den Code, der zufällig den Containernamen von Docker generiert, nach Python zu portieren. -
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Verwendung der C-Bibliothek in Python
[Python] Ich werde FTP auf den FTP-Server hochladen.
Ich möchte den Fortschritt in Python anzeigen!
Schreiben Sie Python2-Code in Python3 um (2to3)
Python Ich weiß nicht, wie ich den Druckernamen bekomme, den ich normalerweise benutze.
Bei der Konvertierung von CSV in JSON mit Python bin ich auf einen Zeichencode gestoßen
Ich habe versucht, die Python-Bibliothek "pykakasi" zu verwenden, die Kanji in Romaji konvertieren kann.
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) zu überarbeiten.
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Ich möchte mit Python-Datenklasse nach hinten erben
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
[Python] Pandas Code, der wahrscheinlich wiederverwendet wird
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich möchte R-Datensatz mit Python verwenden
Ich habe versucht, die String-Operationen von Python zusammenzufassen
[Python / C] Ich habe versucht, ein Gerät zu erstellen, das den Bildschirm eines PCs drahtlos aus der Ferne scrollt.
Ich habe die C-Erweiterung von Python ausprobiert
Konvertieren Sie Python 3.x-Code in Python 2.x.
Ich habe die Python-Quelle heruntergeladen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich möchte initialisieren, wenn der Wert leer ist (Python)
Ich habe versucht, den für TensorFlow geschriebenen Code nach Theano zu portieren
[Python] Poesie Ich habe angefangen & Eindruck, dass ich von Pipenv zu Poesie gewechselt bin
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
maya Python Ich möchte die gebackene Animation wieder reparieren.
Was ich getan habe, um die Python2 EOL mit Zuversicht zu begrüßen
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Ich habe gerade das Originalmaterial für den Python-Beispielcode geschrieben
Die Geschichte, dass Python nicht mehr mit VS Code (Windows 10) arbeitet
Verschiedene Hinweise zur Verwendung von Python für Projekte
Ich möchte die Natur von Python und Pip kennenlernen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Objektorientiert in C-Sprache: "○ ✕ game" wurde überarbeitet und nach Python portiert
Ich möchte den EDINET-Code und die Wertpapiernummer zuordnen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich möchte Python mit VS-Code ausführen können
[Python3] Liste der Websites, auf die ich beim Starten von Python verwiesen habe
Übergeben Sie die OpenCV-Daten der ursprünglichen C ++ - Bibliothek an Python
[C / C ++] Übergeben Sie den in C / C ++ berechneten Wert an eine Python-Funktion, um den Prozess auszuführen, und verwenden Sie diesen Wert in C / C ++.
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) in objektorientiertes Knuspriges umzuwandeln
Die Geschichte, dass die Version von Python 3.7.7 nicht an Heroku angepasst wurde
Überlassen Sie die mühsame Verarbeitung Python
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen