The Python Oracle

What __future__ features should I import in Python v2.6.2?

--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Lost Civilization

--

Chapters
00:00 What __future__ Features Should I Import In Python V2.6.2?
00:41 Accepted Answer Score 7
01:24 Answer 2 Score 7
02:30 Thank you

--

Full question
https://stackoverflow.com/questions/9898...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #python3x #python26 #pythonmodule

#avk47



ACCEPTED ANSWER

Score 7


Well, even if there wasn't documentation, __future__ is also a regular module that has some info about itself:

>>> import __future__
>>> __future__.all_feature_names
['nested_scopes', 'generators', 'division', 'absolute_import', 'with_statement', 'print_function', 'unicode_literals']
>>> __future__.unicode_literals
_Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 131072)

Python 2.6 has most of the features already enabled, so choose from division, print_function, absolute_import and unicode_literals.

And no, import __future__ won't work as you think. It's only magic when you use the from __future__ import something form as the first statement in the file. See the docs for more.

Of course, no matter how much you import from __future__, you will get different behavior in 3.x.




ANSWER 2

Score 7


What other features should I import from __future__?

To get the most up-to-date behaviour, you should of course import every __future__ feature that's offered, except the ones that you get anyway. (The way the system is set up, old features are not dropped even after they're always-on.)

Note that import __future__ will not give you everything, and neither will from __future__ import *. The from ... import ... syntax is special-cased for __future__ (which is how it works), but __future__ is still a real module that you can import with import __future__. However, doing so will let you know the actual feature names, as well as information on when they were (or are expected to be) made default, and when they became available.

>>> [
...     name for name in __future__.all_feature_names if
...     getattr(__future__, name).optional <=
...     sys.version_info <
...     getattr(__future__, name).mandatory
... ]

['division', 'print_function', 'unicode_literals']

is what I get on 2.7.2.