首页 > 解决方案 > 在函数内部调用函数与返回,哪个更高效?

问题描述

在以下 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

标签: performancefunctionreturn

解决方案


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)。


推荐阅读