函数参数中的裸星号?

11 浏览
0 Comments

函数参数中的裸星号?

在函数参数中,裸的星号(bare asterisk)是什么意思?

当我查看pickle模块时,我看到了这个:

pickle.dump(obj, file, protocol=None, *, fix_imports=True)

我知道在参数前加单个或双个星号(用于可变数量参数),但这个什么都不在前面。而且我很确定这与pickle没有任何关系,这只是一个例子。我只在发送到解释器时学到了它的名字:

>>> def func(*):
...     pass
...
  File "", line 1
SyntaxError: named arguments must follow bare *

如果有所影响的话,我使用的是python 3.3.0版本。

admin 更改状态以发布 2023年5月21日
0
0 Comments

\n\n原始回答完全回答了问题,只是添加了一些相关信息。单个星号的行为源于PEP-3102。引用相关部分:

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\"。

0
0 Comments

Bare *被用来强制调用者使用命名参数——因此当您没有后续关键字参数时,不能定义一个带有*作为参数的函数。

有关更多细节,请参见此回答Python 3文档

0