how to import __future__ for keyword-only argument

2020-04-03 03:39发布

The following code in python2.6 throws syntax error

>>> def f(a,*args,c):
  File "<stdin>", line 1
    def f(a,*args,c):
                  ^
SyntaxError: invalid syntax

but this syntax is valid in python3.0. I would like to know what should I import in my interpreter to make it work. ie. from import __future__ ????

for importing print function of 3.0, I would do from __future__ import print_function

similarly this defination is invalid in 2.6

def f(a,*b,c=5,**kwargs):

while it is legal in 3.0

3条回答
够拽才男人
2楼-- · 2020-04-03 04:12

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.

查看更多
Evening l夕情丶
3楼-- · 2020-04-03 04:17

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
查看更多
做自己的国王
4楼-- · 2020-04-03 04:37

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.

查看更多
登录 后发表回答