【发布时间】:2017-11-24 15:53:10
【问题描述】:
有没有办法保持 Python 3 语法在 *args 之后调用默认参数,同时仍然与 Python 2 兼容?
我有这样的功能:
def foo(*args, bar='test'):
pass # do stuff with args and bar
问题是模块需要同时兼容 Python 2 和 3,因此*args 之后的默认参数将不起作用。看过this answer,推荐做
def foo(*args, **kwargs):
bar = kwargs.pop('bar', 'test')
# do stuff with args and bar
哪种方法有效,但无可否认,它不如第一种方法清楚。第一种方法的好处是它是部分自我记录的,而使用第二种方法,用户必须四处搜索才能弄清楚发生了什么。 可读性很重要。
那么,有没有一种方法可以让我至少在模块中使用第一个方法,同时仍然让代码在 Python 2.7 上运行?例如,可能写两次函数定义,一次用于Py2,一次用于Py3?
【问题讨论】:
-
你当然可以编写两次函数,但是如果第二个版本同时适用于 Python 2 和 Python 3,你为什么要这样做?如果您的目标是清晰,那么您将通过拥有两个版本来使您的功能更加清晰。只需对您的功能发表评论会更清晰,更容易。
标签: python python-3.x python-2.7 compatibility