Python 2.x和3.x的带参数和默认kwargs的函数

3

我有一个Python类,其中有一个方法:

class Table(object):
    def create_index(self, *fields, name=None):
        ...

这段代码在Python 3.4中可以正常工作,但在Python 2.7中会因为参数和默认关键字参数的顺序而抛出SyntaxError异常。如果我将其改为:

def create_index(self, name=None, *fields):
    ...

根据这篇文章,它适用于Python 2.7并且在Python 3.4中不会抛出错误,但是fields无论我传入什么都最终变成了一个空元组。我像这样调用它:table.create_index('address')。有没有某种方法可以定义一个带有args和默认kwargs的函数,使其与两个版本兼容?

@wim,也许,有哪些可能性? - serverpunk
1个回答

4
很遗憾,在Python 2中,您无法填充*args并省略可选的命名参数。这个功能是在Python 3中添加的,专门用于此目的。
以下是我能想到的最佳解决方法:
def create_index(self, *fields, **kwargs):
    name = kwargs.pop('name', None)

它会强制你按名称提供“name”,但是你原来的Python 3接口似乎已经要求这样做了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接