在这个question中,我们描述了由于Python3,您可以使用这个符号:
def func(a, b, *args, kw1=None, **kwargs)定义函数,而不是传统的Python2方式:
def func(a, b, kw1=None, *args, **kwargs)是否有任何应使用签名的商定最佳做法,或是否基于个人喜好?
发布于 2016-07-03 12:52:32
这里不可能有任何“最佳”实践,因为这两个定义意味着不同(在某种程度上,相反)事物:
def func(a, b, kw1=None, *args, **kwargs):
...这意味着函数将有一个可选的命名参数kw1,它可以作为关键字(func(1, 2, kw1=3))或位置参数(func(1, 2, 3))传递。(实际上,除非使用相对新的/-syntax显式指定,否则任何命名参数都可以作为关键字传递。)
但是,如果命名参数跟随*args (或仅仅是*),则只能作为关键字传递。例如:
def func(a, b, *, kw1=None, **kwargs):
...不能被称为func(1, 2, 3),并且
def func(a, b, *args, kw1=None, **kwargs):
print(a, b, kw1)func(1, 2, 3)将打印1, 2, None,因为位置参数会转到*args部分。(感谢@tobias_k指出这一点)。
https://stackoverflow.com/questions/38169978
复制相似问题