繁体   English   中英

使用args和Python 2.x和3.x的默认kwargs

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM