有没有办法保持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?
答案 0 :(得分:0)
不,你不能在Python 2解释器使用的文件中使用Python 3表单。这是因为*args
之后放置的仅关键字参数是对Python语法的更改,因此在您接近执行代码之前,它将导致Python 2中出现语法错误。
您必须在两种情况下都使用Python 2版本,或者使用单独的源文件并仅导入正确的源文件。