【发布时间】:2019-01-02 21:53:57
【问题描述】:
假设我们在 Python 中定义了两个函数 f(x) 和 g(x)。 对于每个 x,如 x = 7,h = f(7) * g(7) 是一个数字。
但是,如果我们尝试分配函数 h = f * g 的类型
TypeError: *: 'function' 和 'function' 的操作数类型不受支持
我的问题是:为什么在 Python 中做这样的操作不是微不足道的(从 Python 的工作原理来看)?当然,在许多情况下,给定两个函数,我们希望能够操纵给出它们的逐点乘积的函数?
或者仅仅是这种情况永远不会发生?事实上,我们可以很容易地定义函数 f(x)*g(x)。
【问题讨论】:
-
函数相乘没有任何意义。函数是对象。
object * object是什么意思?您想将函数的返回值相乘。这两个语句不等价 -
同意@DeepSpace 的观点。您将有更好的运气创建一个新函数/ lambda,它将计算两个函数的结果相乘。
-
因为 Python 是一种编程语言,而不是数学抽象
-
@DeepSpace 将
f * g定义为lambda x: f(x) * g(x)是完全合理的。但是,将f * g定义为两个函数的convolution 也是完全合理的。此外,Python 也比数学函数更通用,您很快就会遇到如何定义具有“不兼容”调用签名的函数乘积的问题。 (2-argument 函数和 1-argument 函数的乘积是什么?相同关键字参数的冲突使用呢?等等) -
@chepner Python 不仅仅处理数字。如果
f是insert_to_db而g是make_coffie,f * g是什么意思?恕我直言,函数级运算符过于模糊和抽象。这就是我所说的“没有任何意义”
标签: python python-3.x