how to import __future__ for keyword-only argument of python 3.0?

The new syntax is discussed in PEP 3102 and it's indeed not valid in Python 2.x.

However you can obtain the keyword arguments from **kwargs manually:

def f(a, *b, **kwargs):
    if 'c' in kwargs:
        pass

The other alternative is to upgrade to Python 3.x.


This feature of the Python 3 compiler has not been backported to Python 2.x.

There is no magic from __future__ import switch to enable it, your only option is to upgrade to Python 3.x.

Your second function could instead be defined as:

def (a, *b, **kwargs):
   c = kwargs.pop('c', 5)

to be Python 2 compatible.


Another way to emulate keyword-only-arguments is:

def f(a, *args, **kwds):
    b = kwds.get('b', 42) # 42 being the default for b

if you wan't to make sure that no unsolicited arguments are passed you can use pop instead:

def f(a, *args, **kwds):
    b = kwds.pop('b', 42)

    assert not kwds # after we've popped all keywords arguments kwds should be empty