Python 星号*作为函数/类/方法签名中的第一个参数是什么意思?

Python 星号*作为函数/类/方法签名中的第一个参数是什么意思?,python,signature,Python,Signature,我目前正在努力了解图书馆。我总是在表格中偶然看到一个签名: class tensorforce.core.layers.Dense(*, size, bias=True, activation='tanh', dropout=0.0, initialization_scale=1.0, vars_trainable=True, l2_regularization=None, name=None, input_spec=None) 如果星号*在最开始的时候,这意味着什么?我如何实例化这样一个类

我目前正在努力了解图书馆。我总是在表格中偶然看到一个签名:

class tensorforce.core.layers.Dense(*, size, bias=True, activation='tanh', dropout=0.0, initialization_scale=1.0, vars_trainable=True, l2_regularization=None, name=None, input_spec=None)

如果星号*在最开始的时候,这意味着什么?我如何实例化这样一个类,或者你可以这样做吗

表单中的实例化

from tensorforce.core.layers import Dense
d = Dense(4)
失败并显示错误消息

Traceback (most recent call last):

  File "<ipython-input-6-df27ca99113e>", line 1, in <module>
    Dense(4)

TypeError: __init__() takes 1 positional argument but 2 were given
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
密集型(4)
TypeError:\uuuu init\uuuuuu()接受1个位置参数,但提供了2个

*
参数之后指定的任何参数(在本例中,所有参数)都是。只能按关键字提供,不能按位置提供;这意味着您的示例应该是:

from tensorforce.core.layers import Dense
d = Dense(size=4)

您收到的错误消息不是非常直观,是吗?这是因为在Python中,对象的方法本质上是一个函数(这就是为什么通常在方法定义中编写
self
,但在调用方法时不提供它)


在本例中,
\uuuuu init\uuuu
方法只接受一个位置参数:它自己的对象实例。由于您还按位置提供了
size
,Python抱怨它得到了两个参数,即使您只显式地给了它一个参数。

对于这个问题,这是一个更准确的复制目标:。任何锤击者请编辑列表