我有一个 Python 类,其方法如下:
class Table(object):
def create_index(self, *fields, name=None):
...
它在 Python 3.4 中工作正常,但在 Python 2.7 中抛出一个 SyntaxError
,因为 args 和默认 kwarg 的顺序。如果我将其更改为:
def create_index(self, name=None, *fields):
...
根据 this post它在 Python 2.7 中工作并且在 Python 3.4 中不会抛出错误,但是,无论我传入什么,fields
总是以空元组结束。我这样调用它:
table.create_index('地址')
有没有什么方法可以用 args 和 default kwargs 定义一个与两个版本兼容的函数?
最佳答案
遗憾的是,在 Python 2 中,您不能在填充 *args
的同时还省略可选的命名参数。您正在使用的功能是在 Python 3 中添加的,正是为了这个目的。
这是我能想到的最佳解决方法:
def create_index(self, *fields, **kwargs):
name = kwargs.pop('name', None)
它强制您按名称提供 name
,但您原来的 python 3 接口(interface)似乎已经要求这样做了。
关于python - Python 2.x 和 3.x 的带有 args 和默认 kwargs 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36440371/