10

python2.6中的以下代码抛出语法错误

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

但是这个语法在 python3.0 中是有效的。我想知道我应该在我的解释器中导入什么以使其工作。IE。from import __future__ ????

对于导入print function3.0,我会做from __future__ import print_function

同样,此定义在 2.6 中无效

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

虽然在 3.0 中是合法的

4

3 回答 3

22

Python 3 编译器的这一特性尚未向后移植到 Python 2.x。

没有from __future__ import启用它的神奇开关,您唯一的选择是升级到 Python 3.x。

您的第二个函数可以定义为:

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

与 Python 2 兼容。

于 2013-10-30T18:02:34.643 回答
5

新语法在PEP 3102中讨论,它在 Python 2.x 中确实无效。

**kwargs但是,您可以手动获取关键字参数:

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

另一种选择是升级到 Python 3.x。

于 2013-10-30T18:07:10.587 回答
2

另一种模拟关键字参数的方法是:

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

如果您不想确保没有传递未经请求的参数,您可以使用pop

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

    assert not kwds # after we've popped all keywords arguments kwds should be empty
于 2016-02-03T09:27:18.413 回答