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

2024-09-28 19:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在努力理解Tensorforce库。我总是在表格中偶然看到一个签名:

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)

Tensorforce Dense Layer

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

表单中的实例化

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

Tags: 实例corenonetrueinputsizelayersactivation
1条回答
网友
1楼 · 发布于 2024-09-28 19:21:23

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

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

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

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

相关问题 更多 >