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

前端 未结 3 1646
感动是毒
感动是毒 2021-01-17 19:58

The following code in python2.6 throws syntax error

>>> def f(a,*args,c):
  File \"\", line 1
    def f(a,*args,c):
                  ^         


        
相关标签:
3条回答
  • 2021-01-17 20:50

    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
    
    0 讨论(0)
  • 2021-01-17 20:55

    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.

    0 讨论(0)
  • 2021-01-17 20:56

    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.

    0 讨论(0)
提交回复
热议问题