python - 了解在单个语句中使用多个 python 装饰器

标签 python python-3.x function decorator python-decorators

我最近遇到了一个代码片段,它与下面给出的代码片段非常相似:

def abc(a,b,c):
    a1 = a[:, :1]
    b1 = b[:1, :]
    c1 = c[:1, :]
   
    a2 = a1.conj().transpose()
    b2 = c1.conj().transpose()
   
    d = np.linalg.inv(np.sqrt(b1))
   
    e = d @ a2 @ b @ b2 @ d
   
    return e

a,b,c are numpy arrays.

我正在尝试了解 python 装饰器,并从 this question 学到了一些东西.

但是我无法弄清楚变量e是如何定义的。到底发生了什么?

我是Python初学者。据我所知,装饰器包装了一个函数,并且函数作为参数传递。但在这里,这些都是 numpy 数组。

对定义变量 e 时到底发生了什么或单行中具有多个装饰器的特定索引的含义的任何解释都会非常有帮助。

最佳答案

e = d @ a2 @ b @ b2 @ d与Python装饰器无关。这里的 @ 字符是 Python @ 运算符:https://docs.python.org/3/library/operator.html#operator.matmul

PEP-465 链接:https://www.python.org/dev/peps/pep-0465/

来自 numpy 文档 link :

The matmul function implements the semantics of the @ operator introduced in Python 3.5 following PEP465.

关于python - 了解在单个语句中使用多个 python 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64572986/

相关文章:

java - 为什么我的函数没有在我的程序(java)中运行?

r - dplyr array() 适用于 c() 内的单个变量,但在函数内部求值时不适用于 c() 内的多个变量

python:如何在不更改参数的情况下调用函数?

python - 获取错误的数组排序(用Python编写堆排序)

python - 如何从列表中检索单词的位置?

python - python 3中的发电机速度

python - 如何向 wit.ai 发送非英语语音识别请求

python - Conda 表示在 Python 3.5.1 中安装 dateutil 存在冲突

python - 如何检查一行是否包含列表中的字符串并打印匹配的字符串

python - Python 3 中的 super() 是如何实现的?