[英]Function with args and default kwargs for Python 2.x and 3.x
我有一个Python类,其方法如下:
class Table(object):
def create_index(self, *fields, name=None):
...
这在Python 3.4中运行良好,但由于args和默认kwarg的顺序,因此在Python 2.7中抛出了一个SyntaxError
。 如果我将其更改为:
def create_index(self, name=None, *fields):
...
根据这篇文章,它在Python 2.7中工作,并且不会在Python 3.4中引发错误,但是,无论我传入什么, fields
总是最终成为一个空元组。我称之为:
table.create_index('address')
有没有办法用args和默认的kwargs定义一个兼容两个版本的函数?
遗憾的是,在Python 2中,您无法填充*args
同时也省略了可选的命名参数。 您正在使用的功能已添加到Python 3中,正是出于此目的。
这是我能想到的最好的解决方法:
def create_index(self, *fields, **kwargs):
name = kwargs.pop('name', None)
它迫使你提供name
的名字,但你原来的Python 3接口似乎已经要求反正。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.