我有一个function定义如下:

def test(self, *args, wires=None, do_queue=True):
    pass

在Python3中,它正常运行,但在Python2中它与SyntaxError崩溃。如何修改它以在Python2中工作?

分析解答

在Python 2中实现此功能的唯一方法是将keyword-only参数接受为**kwargs并手动提取它们。 Python 2无法以任何其他方式进行keyword-only参数;这是Python 3的新功能允许这一点

最接近的Python 2等价物将是:

def test(self, *args, **kwargs):
    wires = kwargs.pop('wires', None)
    do_queue = kwargs.pop('do_queue', True)
    if kwargs:
        raise TypeError("test got unexpected keyword arguments: {}".format(kwargs.keys()))