Flirte von PHP nach Python
Ich habe viel Code in PHPs Birne geschrieben, aber seit ich zum Komponisten gewechselt bin, habe ich ihn nicht wirklich verstanden, also bin ich zu Python gekommen.
Es ist eine gute Idee. Während ich noch ein frisches Gefühl habe, schreibe ich auf, was ich so gefühlt habe, wie es ist.
Studie
Eine Klasse, die MIDI (SMF) -Dateien speichert.
Der Basisteil konnte ohne geringfügige Korrekturen in ca. 4 Stunden portiert werden. Python ist unglaublich.
- http://d.hatena.ne.jp/yoya/20141105/io_midi
Portierungswerkzeug
- http://sourceforge.net/projects/php2py/
――Es ist ein ziemlicher Fehler, aber es ist praktisch, weil es eine mechanische Umwandlung vornimmt.
――Aber vielleicht habe ich auf dieser Ebene das Gefühl, dass ich meine eigenen machen und sie verbessern kann.
- http://taichino.com/programming/947
- Es scheint, dass Sie PHP mit PHC analysieren können.
- Es scheint gut, Python-Code automatisch aus dem PHP-Syntaxbaum zu generieren.
Was ich gelernt habe
- Auspacken ist anders
- Die Formatzeichenfolge unterscheidet sich von PHP. (Gibt es eine Schule?)
--Verwenden Sie ab dem ersten Rückgabewert. (Ab dem zweiten in PHP)
- Verwenden Sie nicht neu. OK mit a = Klass ()
- Beim Drucken ist es mühsam, standardmäßig einen Zeilenumbruch und end = "" als zweites Argument hinzuzufügen.
--sys.stdout.write hat keinen Zeilenumbruch und es ist praktisch, den Teil sys.stdout mit fp zu wechseln.
- Kann mit print_ = partiell (print, end = "") bearbeitet werden
- Es ist mühsam und mühsam, sich selbst als erstes Argument der Klassenmethode zu erhalten.
- Es scheint, dass das Starten einer Klassenmethode mit _ sie privat macht.
- Die Ausnahme ist "Ausnahme auslösen" ("Fehlerwortlaut"). Sie können Exception erben.
- http://docs.python.jp/2/library/exceptions.html#module-exceptions
--PHP list ($ a, $ b) = $ arrayVal ist praktisch, aber Python ist einfacher mit a, b = arrayVal
--is_null Es gibt kein, aber Sie können es mit == None vergleichen, und es gibt has_key anstelle von isset (aber seien Sie natürlich vorsichtig beim Umgang mit null).
- (Addition 2014/11/6) == Sie sollten None anstelle von None verwenden.
- (Ergänzung 2014/11/6) Verwenden wir anstelle von has_key
- Bei der Verwendung von Pipes oder Weiterleitungen bei der japanischen Konvertierung tritt ein Fehler auf
- Da Python2 stdout None (= ascii) ist, geben Sie es explizit mit der Umgebungsvariablen PYTHONIOENCODING an.
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3048' in position 0: ordinal not in range(128)
- Verwenden Sie str.format anstelle von% für das Zeichenfolgenformat.
--str.format (a, b) anstelle von str% (a, b)
- Normale assoziative Arrays haben im Gegensatz zu PHP keine Reihenfolge, aber Sie können Sammlungen verwenden. OrderedDict, um dies zu tun.
- Beachten Sie, dass nur die Reihenfolge zum Zeitpunkt der Initialisierung nicht beibehalten wird. Wenn Sie später einen Wert [key] = hinzufügen, ist dies in Ordnung.
Was ich fühlte
--Während (n--) nicht angewendet wird, wird es ein verschwenderischer Geist sein. Erstens ist n-- nutzlos.
--for (..; ..; ..) kann nicht durchgeführt werden, daher habe ich das Gefühl, dass die Schleifenbedingung schwer zu verstehen ist.
――Das Aufrufen von Aufzählungen oder Elementen zum Drehen eines Arrays oder assoziativen Arrays mit for scheint Syntaxzucker zu wollen.
――Sie brauchen es nicht, am Ende der Zeile, aber es ist schwierig, es zu unterdrücken, weil Sie es von Hand eingeben. Ich bin es gewohnt, kein $ hinzuzufügen.
――Die Einrückung interessiert mich nicht wirklich. Der PHP-Modus von emacs scheint jedoch ein anderes Zeichen zu erhöhen, und es ist schwierig, ihn zum Zeitpunkt der Portierung zu beheben.
- Ich kann die switch-Anweisung nicht verwenden, aber ich denke, es ist besser, elif zu verwenden, als die Pause zu vergessen und schrecklich zu werden. Es ist jedoch etwas mühsam, den Ort zu portieren, an dem die Technologie, die die Unterbrechung steuert, verwendet wird, ohne sie absichtlich zu schreiben.
Ich fühle mich übrigens nicht mehr unwohl.