The following code in python2.6 throws syntax error
>>> def f(a,*args,c):
File \"\", line 1
def f(a,*args,c):
^
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
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.