首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在函数参数中使用星号?

在函数参数中使用星号?
EN

Stack Overflow用户
提问于 2013-01-13 16:43:12
回答 6查看 55.8K关注 0票数 349

函数参数中的空星号有什么作用?

当我查看pickle module时,我看到了以下内容:

代码语言:javascript
复制
pickle.dump(obj, file, protocol=None, *, fix_imports=True)

我知道在参数前面有一个星号和两个星号(对于可变数量的参数),但这没有任何意义。我很确定这和泡菜无关。这可能只是发生这种情况的一个例子。当我把这个发送给解释器时,我才知道它的名字:

代码语言:javascript
复制
>>> def func(*):
...     pass
...
  File "<stdin>", line 1
SyntaxError: named arguments must follow bare *

如果重要的话,我使用的是python 3.3.0。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-01-13 16:50:59

Bare *用于强制调用者使用命名参数-因此当您没有以下关键字参数时,不能使用*作为参数定义函数。

有关详细信息,请参阅this answerPython 3 documentation

票数 313
EN

Stack Overflow用户

发布于 2016-09-02 12:16:24

虽然原始答案完全回答了这个问题,但只需添加一些相关信息。单个星号的行为源自PEP-3102。引用相关章节:

代码语言:javascript
复制
The second syntactical change is to allow the argument name to
be omitted for a varargs argument. The meaning of this is to
allow for keyword-only arguments for functions that would not
otherwise take a varargs argument:

    def compare(a, b, *, key=None):
        ...

简单地说,这意味着要传递key的值,您需要显式地将其作为key="value"传递。

票数 91
EN

Stack Overflow用户

发布于 2018-10-23 03:20:12

代码语言:javascript
复制
def func(*, a, b):
    print(a)
    print(b)

func("gg") # TypeError: func() takes 0 positional arguments but 1 was given
func(a="gg") # TypeError: func() missing 1 required keyword-only argument: 'b'
func(a="aa", b="bb", c="cc") # TypeError: func() got an unexpected keyword argument 'c'
func(a="aa", b="bb", "cc") # SyntaxError: positional argument follows keyword argument
func(a="aa", b="bb") # aa, bb

上面使用**kwargs的示例

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

func(a="aa",b="bb", c="cc") # aa, bb, {'c': 'cc'}
票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14301967

复制
相关文章

相似问题

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