J'ai un problème que je veux résoudre avec itertools.imap (). Cependant, après avoir importé itertools dans IDLE Shell et appelé itertools.imap (), IDLE Shell m’a dit qu’itertools n’avait pas l’attribut imap. Qu'est-ce qui ne va pas?
>>> import itertools
>>> dir(itertools)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', '_grouper', '_tee', '_tee_dataobject', 'accumulate', 'chain', 'combinations', 'combinations_with_replacement', 'compress', 'count', 'cycle', 'dropwhile', 'filterfalse', 'groupby', 'islice', 'permutations', 'product', 'repeat', 'starmap', 'takewhile', 'tee', 'Zip_longest']
>>> itertools.imap()
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
itertools.imap()
AttributeError: 'module' object has no attribute 'imap'
itertools.imap()
est en Python 2, mais pas en Python 3.
En fait, cette fonction a été déplacée uniquement dans la fonction map
dans Python 3 et si vous souhaitez utiliser l'ancienne carte Python 2, vous devez utiliser list(map())
.
Si vous voulez quelque chose qui fonctionne à la fois dans Python 3 et Python 2, vous pouvez faire quelque chose comme:
try:
from itertools import imap
except ImportError:
# Python 3...
imap=map
Vous utilisez Python 3, il n’ya donc pas de fonction imap
dans le module itertools
. Il a été supprimé, car la fonction globale map
renvoie maintenant des itérateurs.
Que dis-tu de ça?
imap = lambda *args, **kwargs: list(map(*args, **kwargs))
En réalité!! :)
import itertools
itertools.imap = lambda *args, **kwargs: list(map(*args, **kwargs))
J'aime les python-future
idoms pour le code universel Python 2/3, comme ceci:
# Works in both Python 2 and 3:
from builtins import map
Vous devez ensuite refactoriser votre code pour utiliser map
partout où vous utilisiez imap
auparavant:
myiter = map(func, myoldlist)
# `myiter` now has the correct type and is interchangeable with `imap`
assert isinstance(myiter, iter)
Vous devez installer future pour que cela fonctionne à la fois en 2 et en 3:
pip install future
Vous pouvez utiliser le script 2to3 ( https://docs.python.org/2/library/2to3.html ), qui fait partie de chaque installation Python pour traduire votre programme ou Projets entiers de Python 2 à Python 3.
python <path_to_python_installation>\Tools\scripts\2to3.py -w <your_file>.py
(l'option -w écrit les modifications dans le fichier, une sauvegarde est stockée)