在这个问题中,描述了自Python3以来你可以使用这种表示法:
def func(a, b, *args, kw1=None, **kwargs)
定义一个函数,而不是传统的Python2方式:
def func(a, b, kw1=None, *args, **kwargs)
是否有任何商定的最佳做法,应使用哪种签名,还是基于个人喜好?
这里没有任何"最佳"做法,因为这两个定义意味着不同(在某种程度上,相反)的事情:
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指出这一点).
| 归档时间: | 
 | 
| 查看次数: | 2932 次 | 
| 最近记录: |