python - 星号 * 作为函数/类/方法签名中的第一个参数意味着什么?

标签 python signature

我目前正在尝试了解 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

最佳答案

*“参数”之后指定的任何参数(因此在本例中是所有参数)都是 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 会提示它有两个参数 - 即使您只显式地给了它一个。

关于python - 星号 * 作为函数/类/方法签名中的第一个参数意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67746969/

相关文章:

python - 如何从 1,000,000 行和 20,000 个特征中获取最近邻矩阵?

python - "TypeError: unsupported operand type(s) for -=: ' 在 PIP 升级期间重试 ' and ' int ' "

python - 动态添加 Pandas 数据框中的列

c# - ECDSA 使用来自 Java 的公钥和签名验证 C# 中的签名

java - 如何更改 mupdf 的颜色绘图?

python - SQLAlchemy - 动态掩码对象中的值

python - 生成连续的字母数字

Typescript 接口(interface)实现对索引签名没有影响

javascript - Heroku Node.js Amazon S3 直接上传教程 - SignatureDoesNotMatch

c# - "this"在 C# 方法签名中指的是什么,是否有 VB.NET 等效项?