跳转到主要内容

强制将Python函数内联到它们的调用位置

项目描述

这是一个Python黑客工具,让您能够像在C语言中那样指定“内联”函数。您可以通过在调用位置直接内联函数代码来节省函数调用的开销。当然,作为Python,内联是在运行时完成的。

警告:不要在实际代码中使用此功能。真的。这只是一个有趣的黑客工具。

现在,假设您有一些像这样的代码

def calculate(x):
    return 3*x*x - 2*x + (1/x)

def aggregate(items):
    total = 0
    for item in items:
        total += calculate(item)
    return total

此代码为集合中的每个项目支付函数调用的开销。您可以通过以下方式内联calculate函数来获得实质性的速度提升

def aggregate(items):
    total = 0
    for x in items:
        total += 3*x*x - 2*x + (1/x)
    return total

但现在您在代码质量和重用方面付出了代价。为了达到两者的最佳效果,只需声明calculate函数应内联即可

from atinline import inline

@inline
def calculate(x):
    return 3*x*x - 2*x + (1/x)

def aggregate(items):
    total = 0
    for item in items:
        total += calculate(item)
    return total

现在,当aggregate()函数第一次运行时,它将检测到calculate()函数应内联,进行必要的字节码黑客攻击以实现内联,然后继续执行。后续对aggregate()的任何调用都将避免多次函数调用的开销。

目前仅支持顶层函数的普通调用;如果您尝试内联方法、在字典中查找的函数或其他类似内容,则不会正确工作。它也不支持关键字参数。这些限制可能在将来消失。

字节码再生成的繁重工作由“byteplay”模块完成,这是atinline的唯一依赖项。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

atinline-0.1.1.tar.gz (7.0 kB 查看哈希值)

上传时间

由以下支持