首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3最佳实践参数顺序

Python 3最佳实践参数顺序
EN

Stack Overflow用户
提问于 2016-07-03 12:32:09
回答 1查看 8.7K关注 0票数 10

在这个question中,我们描述了由于Python3,您可以使用这个符号:

代码语言:javascript
复制
def func(a, b, *args, kw1=None, **kwargs)

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

代码语言:javascript
复制
def func(a, b, kw1=None, *args, **kwargs)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-03 12:52:32

这里不可能有任何“最佳”实践,因为这两个定义意味着不同(在某种程度上,相反)事物:

代码语言:javascript
复制
def func(a, b, kw1=None, *args, **kwargs):
    ...

这意味着函数将有一个可选的命名参数kw1,它可以作为关键字(func(1, 2, kw1=3))或位置参数(func(1, 2, 3))传递。(实际上,除非使用相对新的/-syntax显式指定,否则任何命名参数都可以作为关键字传递。)

但是,如果命名参数跟随*args (或仅仅是*),则只能作为关键字传递。例如:

代码语言:javascript
复制
def func(a, b, *, kw1=None, **kwargs):
    ...

不能被称为func(1, 2, 3),并且

代码语言:javascript
复制
def func(a, b, *args, kw1=None, **kwargs):
    print(a, b, kw1)

func(1, 2, 3)将打印1, 2, None,因为位置参数会转到*args部分。(感谢@tobias_k指出这一点)。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38169978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档