Python 3最佳实践参数顺序

时间:2016-07-03 12:32:10

标签: python

在这个question中,描述了自Python3以来你可以使用这种表示法:

def func(a, b, *args, kw1=None, **kwargs)

定义一个函数,而不是传统的Python2方式:

def func(a, b, kw1=None, *args, **kwargs)

是否有任何商定的最佳做法应使用哪种签名或是否基于个人偏好?

1 个答案:

答案 0 :(得分:6)

没有任何"最好的"在这里练习,因为这两个定义意味着不同(在某种程度上,相反):

def func(a, b, kw1=None, *args, **kwargs):
    ...

表示该函数将具有可选的命名参数kw1,该参数可以作为关键字(func(1, 2, kw1=3))或位置参数(func(1, 2, 3))传递。 (事实上​​,除非使用相对较新的/语法明确指定,否则任何命名参数都可以作为关键字传递。)

但是,如果命名参数跟在*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指出这一点。)

相关问题