Python 等价于内联函数或宏

2024-01-09

我刚刚意识到做

x.real*x.real+x.imag*x.imag

比实际操作快三倍

abs(x)**2

其中 x 是复数的 numpy 数组。为了代码的可读性,我可以定义一个类似的函数

def abs2(x):
    return x.real*x.real+x.imag*x.imag

它仍然比 abs(x)**2 快得多,但它是以函数调用为代价的。是否可以内联这样的函数,就像我在 C 中使用宏或使用 inline 关键字所做的那样?


是否可以内联这样的函数,就像我在 C 中使用宏或使用 inline 关键字所做的那样?

不。在到达这个特定指令之前,Python 解释器甚至不知道是否存在这样的函数,更不用说它做什么了。

正如评论中所述,PyPy将自动内联(上面的内容仍然成立 - 它“简单地”在运行时生成一个优化版本,从中受益,但在失效时打破它),尽管在这种特定情况下,这并没有帮助,因为不久前才开始在 PyPy 上实现 NumPy直到今天还不是测试版。但底线是:不要担心 Python 中这个级别的优化。实现要么自行优化,要么不优化,这不是您的责任。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 等价于内联函数或宏 的相关文章

随机推荐