performance - 在函数内部调用函数与返回,哪个更高效?
问题描述
在以下 2 种情况下,哪一种更有效?
情况1:
def test(x):
hello(x)
def hello(y):
return world(y)
def world(z):
return z
案例二:
def test(x):
a = hello(x)
def hello(y)
b = world(y)
return b
def world(z):
c = z
return z
解决方案
TL;DR:两者都一样快。
以下是我的机器上使用 CPython 3.7.6 解释器的时间(在 10000000 循环中重复运行 3 次):
First case: 109 ns
Second case: 111 ns
两者之间的差异可以忽略不计。因此,两者的速度一样快。
使用 PyPy(基于 JIT 的解释器),JIT 编译器能够优化这两种情况并删除所有函数调用。由于 JIT,代码可以零成本执行,因此两种情况的时间完全相同。
如果您使用 Cython,可能会发生同样的事情。
建议:
请不要使用这样的微优化来调整 Python 代码以获得更好的性能。在 Python 中,可读性优先于性能。* 如果您真的关心此类事物的性能,请使用 PyPy 或 Cython 等替代解释器或集成的 Python JIT 编译器(如 Numba)。
推荐阅读
- c# - 在 C# 控制台中确认是或否
- c# - 角度将列表值传递给 JSON 主体 - .Net Core 和多对多关系
- python - 由于错误“pkg_resources.DistributionNotFound: The 'psutil == 5.6.7' distribution was not found”,无法在 Ubuntu 19.10 上运行 GNS3 的问题
- git - 恢复在单个提交中创建和删除的 git 文件
- json - 在颤振中插入两个 json 数组
- r - R中不一致的函数分离
- javascript - pdfkit表格中的对齐问题?
- angular - 从 paramMap 获取参数的问题
- python - Python:绘制具有x值之间实际距离的折线图
- azure-pipelines - Azure 管道的 CefSharp 构建错误:无法加载文件或程序集“CefSharp.Core.dll”