遇到了 Python 的少见语法问题

2021 年 2 月 1 日
 SlipStupig

在看一个 numpy 的代码时候遇到了一个,平时见得比较少的操作符符号--“@”, 实例如下:

a1 = np.array([[1,2,3],[4,5,6]])
b1 = np.array([1,2,3])
a1 @ b1

array([14, 32])

我知道 @xxx 可以作为装饰器,但是我尝试了一下 python 其它数据结构, 都好像不支持, 想知道@到底是什么含义呢?

2851 次点击
所在节点    Python
11 条回复
AoEiuV020
2021 年 2 月 1 日
np 是什么,
just1
2021 年 2 月 1 日
numpy,矩阵乘法
anzu
2021 年 2 月 1 日
SlipStupig
2021 年 2 月 1 日
@anzu python3.5 以后提供矩阵计算标准库了嘛?
Yienschwen
2021 年 2 月 1 日
3.5 引入的一个新运算符 __matmul__, https://www.python.org/dev/peps/pep-0465/ https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types
支不支持取决于这个类型有没有实现这运算符,正如其名它是用来进行矩阵乘法的,一般的数据结构不支持也是自然的
Ediacaran
2021 年 2 月 1 日
__matmul__ 方法
nonoda
2021 年 2 月 1 日
@AoEiuV020 import numpy as np
nonduality
2021 年 2 月 1 日
a1 @ b1 等价于 a1.dot(b1),其实我认为这是一个毫无价值、根本没必要引入的新语法。
rogwan
2021 年 2 月 1 日
@nonduality 增加一个价值不大的运算符,副作用更多,觉得 PEP572 引入的符号也没什么必要
chizuo
2021 年 2 月 1 日
@nonduality 在某些情况下还是有不一样的,你可以参见 numpy manual
hsfzxjy
2021 年 2 月 1 日
作为中缀运算符看起来还是比.dot 清晰的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/750370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX