Dans Python 2.6 ou version ultérieure, vous pouvez modifier le comportement de certaines fonctions et instructions en fonction du comportement du système Python 3 en insérant le code suivant.
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
Limité à Python 2.6 ou version ultérieure 2 séries (2.6, 2.7), les éléments suivants peuvent également être utilisés.
from future_builtins import ascii, filter, hex, map, oct, zip
future_builtins
, contrairement à __future__
, n'existe pas dans la série Python 3, donc
Lors de la prise en charge des deux systèmes, il est nécessaire de vérifier la version avant l'importation, ou de la placer dans try / except.
Pour plus de détails sur chaque module, reportez-vous aux documents suivants.
La situation est la même pour Python 2.7, et vous pouvez utiliser le même code que ci-dessus. Python 2.6 est inclus dans ce chapitre principalement parce que Python 2.6 peut survivre (je comprends) dans les prochaines années sur RHEL / CentOS 6. En conclusion, il n'y a pas de différences significatives dans le comportement de «future» et de «future_builtins» entre Python 2.6 et Python 2.7.
En règle générale, Python 2.6 ne doit pas être utilisé par quiconque est autorisé à choisir le runtime Python d'une manière telle que pyenv
. Si vous êtes libre de choisir le runtime, il est préférable de penser à ne pas utiliser Python 2.7, c'est-à-dire l'ensemble du système Python 2. Cependant, il est toujours possible que la bibliothèque que vous souhaitez utiliser (ou le runtime Python) soit liée au système Python 2 car elle ne prend en charge que le système 2.
__future__
est un module relativement ancien introduit dans Python 2.1, et a été utilisé lorsque vous souhaitez capturer une partie du comportement de la nouvelle version dans l'ancienne version de Python. De nos jours, il est souvent évoqué pour rapprocher le comportement de Python 2 et 3, mais cela n'existe pas forcément pour les séries 3.
Certaines fonctionnalités de __future__
n'ont pas de sens à utiliser dans Python 2.6, et bien qu'elles soient inoffensives, elles peuvent prêter à confusion. L'explication dans déclaration future est la suivante.
Les fonctionnalités reconnues par Python 2.6 sont unicode_literals, print_function, absolute_import, division, generators, nested_scopes, with_statement. generators, with_statement, nested_scopes sont redondants car ils sont toujours valides dans Python 2.6 et supérieur.
future_builtins
est un module fourni pour" fournir une fonction qui existe dans Python 2.x mais ne peut pas être ajoutée à l'espace de noms intégré de Python 2.x car il se comporte différemment en Python 3. "6 Le type de fonction est défini. Introduit dans Python 2.6.
Comme mentionné ci-dessus, c'est un module qui n'existe pas dans la série Python 3, donc si vous essayez de l'utiliser en 3 séries, ce sera une erreur au lieu d'être ignoré. Il semble qu'une certaine prudence s'impose lors du codage en gardant à l'esprit les 2e et 3e systèmes.
Chaque fonction importée par future_builtins
est conçue pour se comporter de la même manière que les fonctions intégrées équivalentes de la série Python 3, mais certaines se comportent différemment. Nous ne pouvons pas supposer qu'ils se comportent exactement de la même manière.
Typiquement, le comportement lorsque le premier argument de map ()
est None
est différent.
Python 2.7.12 (default, Jul 20 2016, 12:19:03)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from future_builtins import map
>>> list(map(None, [1, 2, 3]))
[(1,), (2,), (3,)]
La substance de future_builtins.map
dans Python 2.7 est dite ʻitertools.imap ()`.
Comme vous pouvez le voir dans Documentation, cette fonction a un comportement unique lorsque le premier argument «function» est «None». y a-t-il.
Si function vaut None, imap () renvoie un tuple d'arguments.
Les fonctions map ()
de la série Python 3 n'ont pas ce comportement (reference).
En fait, si None est donné au premier argument function
, une erreur se produira dans la série Python3.
Python 3.5.2 (default, Jul 29 2016, 11:13:25)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> list(map(None, [1, 2, 3]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
Recommended Posts