Flirter de PHP à Python
J'ai écrit beaucoup de code en PHP, mais depuis que je suis devenu compositeur, je ne l'ai pas vraiment compris, alors je suis entré dans Python.
C'est une bonne idée, alors même si j'ai encore un sentiment frais, j'écris ce que j'ai ressenti tel qu'il est.
étude
Une classe qui vide les fichiers MIDI (SMF).
La partie de base pourrait être portée en environ 4 heures sans corrections mineures. Python est incroyable.
- http://d.hatena.ne.jp/yoya/20141105/io_midi
Outil de portage
- http://sourceforge.net/projects/php2py/
――C'est une erreur, mais c'est pratique car il effectue une conversion mécanique.
«Mais peut-être qu'à ce niveau, je sens que je peux faire le mien et l'améliorer.
- http://taichino.com/programming/947
--Il semble que vous puissiez analyser PHP avec phc.
--Il semble bon de générer automatiquement du code Python à partir de l'arbre de syntaxe php.
Ce que j'ai appris
- Le déballage est différent
- La chaîne de format est différente de PHP. (Y a-t-il une école?)
--Utiliser à partir de la première valeur de retour. (À partir du second en PHP)
--Ne pas utiliser de nouveau. OK avec a = Klass ()
- Il est difficile pour print d'ajouter un saut de ligne par défaut et end = "" comme deuxième argument.
--sys.stdout.write n'a pas de saut de ligne et il est pratique de changer la partie sys.stdout avec fp.
--Peut être curry avec print_ = partial (print, end = "")
- Il est gênant et gênant de recevoir soi-même comme premier argument de la méthode de classe.
--Il semble que démarrer une méthode de classe avec _ la rende privée.
--L'exception est lever Exception ("error wording"). Vous pouvez hériter d'Exception.
- http://docs.python.jp/2/library/exceptions.html#module-exceptions
--PHP list ($ a, $ b) = $ arrayVal est pratique, mais Python est plus facile avec a, b = arrayVal
--is_null Non, mais vous pouvez comparer avec == None, et il y a has_key au lieu de isset (mais faites attention à ne pas manipuler null, bien sûr).
- (Ajout 2014/11/6) == Vous devez utiliser est None au lieu de None.
- (Ajout 2014/11/6) Utilisons in au lieu de has_key
--Une erreur se produit lors de l'utilisation de tubes ou de redirections dans la conversion japonaise
- Puisque le stdout de la série Python2 est None (= ascii), spécifiez-le explicitement avec la variable d'environnement PYTHONIOENCODING.
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3048' in position 0: ordinal not in range(128)
--Utilisez str.format au lieu de% pour le format de chaîne.
--str.format (a, b) au lieu de str% (a, b)
- Les tableaux associatifs normaux n'ont pas d'ordre contrairement à PHP, mais vous pouvez utiliser collections.OrderedDict pour le faire.
- Notez que seul l'ordre au moment de l'initialisation n'est pas conservé. Si vous ajoutez une [clé] = valeur plus tard, ce n'est pas grave.
Ce que j'ai ressenti
- Bien que (n--) ne soit pas appliqué, ce sera donc un fantôme inutile. En premier lieu, n-- est inutile.
--for (..; ..; ..) ne peut pas être fait, donc je pense que la condition de boucle devient difficile à comprendre.
――Appeler enumerate ou des éléments pour transformer un tableau ou un tableau associatif avec for semble vouloir du sucre de syntaxe.
――Vous n'en avez pas besoin; à la fin de la ligne, mais il est difficile de la supprimer car vous la saisissez à la main. J'ai l'habitude de ne pas ajouter de $.
«Je ne me soucie pas vraiment de l'indentation. Cependant, le mode php d'emacs semble soulever un autre caractère, et il est difficile de le réparer au moment du portage.
- Je ne peux pas utiliser l'instruction switch, mais je pense qu'il vaut mieux utiliser elif que d'oublier la pause et devenir terrible. Cependant, il est un peu gênant de porter l'endroit où la technologie qui contrôle le break est utilisée sans l'écrire intentionnellement.
Au fait, je ne ressens plus aucune gêne.