Je ne peux pas passer facilement à Python3, alors pensons à la compatibilité 2-3

Il est temps de parler de ce qu'il faut faire avec la migration Python 3, j'ai donc enquêté un peu.

Prise en charge de Python2 jusqu'en 2020

La prise en charge de la série Python 2 a été officiellement annoncée jusqu'en 2020. (Il semble qu'il n'y ait pas de 2.8) Que votre produit Python actuel soit ou non opérationnel jusqu'en 2020 Il est temps que vous envisagiez de migrer vers Python3.

Tout d'abord, une petite énumération de la façon dont cela va changer

Python2.X Python3.X Le système 3 fonctionne-t-il avec la notation système 2?
print 'xxx' print('xxx') ×
xrange(1, 10) range(1, 10) ×
except Error, V except Error as V ×

range semble être le comportement de xrange en 3 séries.

Cela ne signifie pas que la transition du 2e système au 3e système changera autant. C'est juste un changement de syntaxe mineur. (Vérifiez si la bibliothèque externe le prend en charge)

Migration ou compatibilité

Même si le support est sorti, il doit être exploité jusque-là, et il est inefficace de le mettre en œuvre séparément pour les 2e et 3e systèmes. Par conséquent, il n'est pas possible de couper le 2e système et de faire une transition, et il est réaliste de trouver un moyen de coexister avec le 3e système. Heureusement, en Python, les 2e et 3e séries peuvent cohabiter.

En cas de migration

Comme c'est un gros problème, l'outil de migration est également 2to3 2to3 est disponible sous forme de bibliothèque de conversion par lots. Il est intégré à Python pour que vous n'ayez pas à l'installer en externe.

Il semble qu'il organisera la syntaxe et l'importera comme il convient en fonction de la syntaxe du système Python 3. 2to3 n'a pas la fonction de convertir de 3 séries en 2 séries. Mais il existe également une bibliothèque tierce appelée 3to2. (Êtes-vous là?) https://pypi.python.org/pypi/3to2

Gardez la compatibilité

Voici ce que vous pouvez faire pour maintenir la compatibilité.

Futur avec notation 3 séries en 2 séries

Le système de l'environnement d'exécution 2 peut être utilisé pour la notation du système 3. http://docs.python.jp/2/library/future.html

Vous pourrez écrire avec print ().

from __future__ import print_function
print ('hoge')

Écrire Unicode comme u'hogehoge 'élimine le besoin de u.

>>> from __future__ import unicode_literals
>>> 'Japonais'
u'\u65e5\u672c\u8a9e'
>>> u'Japonais'
u'\u65e5\u672c\u8a9e'

L'importation a une priorité d'importation absolue (difficile à expliquer)

from __future__ import absolute_import

Il y en a trois ou quatre de plus, mais ils sont omis car ils ne sont pas très pertinents pour Python 2.6 et supérieur.

six Une bibliothèque compatible est également disponible. C'est six. 2 * 3 = 6 et cela semble être six. C'est facile à retenir. Ceci est une bibliothèque externe. http://hhsprings.bitbucket.org/docs/translations/python/six-doc-ja/

pip install six

Pour l'utiliser, il suffit de l'importer et de l'utiliser pour les parties incompatibles des 2e et 3e séries. Il sera utilisé en interne selon la version Python au moment de l'exécution.

Par exemple, dans le cas de chaînes de caractères

Python2 Python3 six
basestring str string_types
unicode str text_type
str bytes binary_type

iterable (collection) Le système itérable semble similaire, donc si vous regardez le dict que vous pourriez utiliser souvent,

Python2 Python3 six
iterkeys keys iterkeys
itervalues values itervalues
iteritems items iteritems

La notation est similaire au 2ème système.

Un bon nombre de composants intégrés peut être absorbé par six.

En premier lieu

Il existe une feuille de triche compatible 2-3! http://python-future.org/compatible_idioms.html

Est-il facile de faire la transition?

J'ai trouvé que c'était compatible, mais trouver et réparer les pièces correspondantes une par une est un effort ridicule. Je veux une bibliothèque de conversion par lots. Y a-t-il?

était! https://github.com/python-modernize/python-modernize Il semble qu'il sera également converti en utilisant six, donc cela semble assez prometteur. Quand j'ai regardé un peu la source, il y en avait six et à venir, donc je pense qu'ils seront convertis en un sentiment agréable! ?? J'aimerais l'essayer à un autre moment. (Je n'ai pas eu assez de temps cette fois. Je suis vraiment désolé.) (Si vous l'avez essayé, c'est votre chance d'écrire d'abord un article!)

La bonne chose à propos de Python 3

La migration prend beaucoup de temps, mais il y a de bonnes choses à propos de Python3.

Indice de saisie

http://docs.python.jp/3/library/typing.html Vous pouvez spécifier le type lors de la définition d'une fonction ou d'une classe.

def greeting(name: str) -> str:
    return 'Hello ' + name

Contrairement au langage de compilation, il ne peut pas être vérifié à l'exécution, Il est assez important de connaître le type d'argument immédiatement pendant le développement afin d'éviter les bogues.

Dictionnaire ordonné

C'est un dictionnaire qui peut être récupéré dans l'ordre dans lequel il a été saisi. Auparavant, je me souviens d'avoir mis l'ordre de tri en valeur, puis de le trier, cela semble donc utile.

>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> od['a'] = 1
>>> od['b'] = 2
>>> od['c'] = 3
>>> for k, v in od.items():
...   print(k, v)
... 
a 1
b 2
c 3

>>> od2 = OrderedDict()
>>> od2['c'] = 3
>>> od2['b'] = 2
>>> od2['a'] = 1
>>> for k, v in od2.items():
...   print(k, v)
... 
c 3
b 2
a 1

Cela semble être encore plus rapide depuis Python 3.5!

De plus, il semble que des générateurs asynchrones seront implémentés dans Python 3.6, et le rêve se répandra. Prenons en charge Python3 pour les nouvelles fonctionnalités ainsi que le motif négatif de la date limite de support!

Recommended Posts

Je ne peux pas passer facilement à Python3, alors pensons à la compatibilité 2-3
Je veux facilement implémenter le délai d'expiration en python
Je veux écrire en Python! (2) Écrivons un test
Utilisons Python Janome facilement
[Python] J'ai essayé d'implémenter un tri stable, alors notez
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
J'ai essayé de toucher Python (installation)
Déplaçons Cython et Numba facilement
pyenv-vertualenv n'installe pas correctement la série python3
Je ne me souviens pas des expressions régulières Python
[Introduction à Python] Utilisons les pandas
Scikit-learn ne peut pas être installé en Python
[Introduction à Python] Utilisons les pandas
Publiez facilement sur Twitter avec Python 3
Je veux déboguer avec Python
[Introduction à Python] Utilisons les pandas
J'ai essayé de déplacer le ballon
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai fait Othello pour enseigner Python3 aux enfants (4)
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
J'ai fait Othello pour enseigner Python3 aux enfants (2)
J'ai essayé d'implémenter PLSA dans Python 2
Entrée standard Python3 que j'ai essayé de résumer
Je veux utiliser jar de python
Je voulais résoudre ABC160 avec Python
Je veux créer un environnement Python
[Introduction à Python] Utilisons foreach avec Python
Je ne peux pas déboguer les scripts python dans Eclipse
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
J'ai fait Othello pour enseigner Python3 aux enfants (5)
J'ai essayé d'implémenter ADALINE en Python
Je voulais résoudre ABC159 avec Python
J'ai essayé d'implémenter PPO en Python
[Python] J'ai essayé de calculer TF-IDF régulièrement
J'ai essayé de toucher Python (syntaxe de base)
Ce que j'étais accro à Python autorun
J'ai fait Othello pour enseigner Python3 aux enfants (3)
J'ai fait Othello pour enseigner Python3 aux enfants (1)
Je voulais résoudre ABC172 avec Python
Outil de déplacement de répertoire vers le package Python (pycd)
Ce que j'ai fait pour économiser la mémoire Python
Pourquoi ne puis-je pas installer matplotlib avec python! !!
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
Je souhaite envoyer Gmail avec Python, mais je ne peux pas en raison d'une erreur
J'ai essayé d'expliquer à quoi sert le générateur Python aussi facilement que possible.
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
J'ai essayé de créer facilement un système de présence entièrement automatique avec Selenium + Python
J'ai pu me moquer d'AWS-Batch avec python, moto, donc je vais le laisser