Not sure this is really an answer, or I should elaborate on my comment, and in hindsight probably not even a very good comment anyway, but:
Firstly, you can just simplify it to:
try:
from itertools import izip as zip
except ImportError: # will be 3.x series
pass
What I was thinking about was:
From 2.6 you can use as per the docs:
from future_builtins import map # or zip or filter
You do however then have the same problem of ImportError
- so:
try:
from future_builtins import zip
except ImportError: # not 2.6+ or is 3.x
try:
from itertools import izip as zip # < 2.5 or 3.x
except ImportError:
pass
The advantage of using future_builtin
is that it's in effect a bit more "explicit" as to intended behaviour of the module, supported by the language syntax, and possibly recognised by tools. For instance, I'm not 100% sure, but believe that the 2to3 tool will re-write zip
correctly as list(zip(...
in this case, while a plain zip = izip
may not be... But that's something that needs looking in to.
Updated - also in the docs:
The 2to3 tool that ports Python 2 code to Python 3 will recognize this usage and leave the new builtins alone.
zip
? I.e.,try: from itertools import izip as zip; except ImportError: pass
. (Please excuse the lack of newlines.) \$\endgroup\$__import__
that I didn't know about or something. \$\endgroup\$