首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数的签名中,如果没有标识符名,那么在Python中星号意味着什么?

在函数的签名中,如果没有标识符名,那么在Python中星号意味着什么?
EN

Stack Overflow用户
提问于 2015-04-14 12:47:51
回答 1查看 1.3K关注 0票数 7

我知道*args的含义和用法。但有时,在args之后,没有比*更好的东西了。例如,在函数pprint

代码语言:javascript
复制
def pprint(object, stream=None, indent=1, width=80, depth=None, *,
           compact=False):
    """Pretty-print a Python object to a stream [default is sys.stdout]."""
    printer = PrettyPrinter(
        stream=stream, indent=indent, width=width, depth=depth,
        compact=compact)
    printer.pprint(object)

签名中有一个*。什么意思?

EN

回答 1

Stack Overflow用户

发布于 2015-04-14 12:51:57

*后面的参数是关键字仅限*“吸收”任何附加的位置参数,因此如果您定义:

代码语言:javascript
复制
def foo(x, y, *, z):
    print(x, y, z)

然后打电话:

代码语言:javascript
复制
foo(1, 2, 3)

不起作用,因为没有提供z,而且只需要两个位置参数:

代码语言:javascript
复制
>>> foo(1, 2, 3)
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    foo(1, 2, 3)
TypeError: foo() takes 2 positional arguments but 3 were given

z 现在必须通过关键字提供

代码语言:javascript
复制
>>> foo(1, 2, z=3)
1 2 3

您可以使用标准的*args来实现这一点,但是使用*可以清楚地表明,您不需要任何附加的位置参数,如果有任何错误在*中结束,则会引发错误。正如PEP所说:

第二个语法更改是允许对varargs参数省略参数名。这的意思是允许只使用关键字的函数的参数,否则不会采用varargs参数。

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

https://stackoverflow.com/questions/29627748

复制
相关文章

相似问题

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