Detecting __future__ features
Carsten Haese
carsten at uniqsys.com
Mon Jul 30 09:08:27 EDT 2007
On Mon, 2007-07-30 at 12:53 +0000, André wrote:
> On Jul 30, 9:39 am, Neil Cerutti <horp... at yahoo.com> wrote:
> > On 2007-07-30, Steven D'Aprano
> >
> > <st... at REMOVE.THIS.cybersource.com.au> wrote:
> > > How would one tell at runtime if a particular feature has been
> > > enabled by the "from __future__ import thing" statement?
> >
> > I don't understand the qualification, "at runtime," you're
> > making. What's wrong with just importing what you want and using
> > it? If it's already been enabled, no harm will come from the
> > import statement.
> >
>
> I'm not the OP, so perhaps I am missing his intent. However, I can see
> a good reason for asking this question.
>
> I seem to recall that the "from __future__ import" statement can only
> be done at the beginning of a script.
Incorrect. It must be done at the beginning of the *file*.
> What if you are designing a
> module meant to be imported, and used by other programs over which you
> have no control? You can't use "from __future__ import" in your
> module.
Incorrect. You can use a __future__ import in a module as long as you do
it at the beginning of the modul file.
> So, you may have to find a way to figure out what's been
> done. (the example given with the division operator is a good one).
No. __future__ directives are scoped to the module. Observe:
$ cat f1.py
def f1():
print 1/2
f1()
import f2
f2.f2()
$ cat f2.py
from __future__ import division
def f2():
print 1/2
$ python f1.py
0
0.5
As you can see, f1 uses past semantics, f2 uses future semantics. Just
use whatever __future__ directives you need for your module at the
beginning of your module, and everything will just work.
HTH,
--
Carsten Haese
http://informixdb.sourceforge.net
More information about the Python-list
mailing list