[PYTHON] Module __future__ et module future_builtins

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.

Pour être exact, il est différent du type de données, mais il n'est pas recommandé en Python de changer le comportement en regardant le type de données pour ce type d'objet, donc je ne le considérerai pas en premier lieu.

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

Module __future__ et module future_builtins
Module de débogage et de test Python
Coopération entre le module python et l'API
[Python] À propos des classes Executor et Future
Module de socket Python 3 et flux de communication de socket
Module d'implémentation de file d'attente et Python "deque"
Coexistence de la journalisation Flask et de la journalisation d'autres modules
Importation de modules et gestion des exceptions en python