强制将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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 010e0d7af800fe60df415c073b78e791f8a5f5c51caa0050c787eb3c244a7f58 |
|
MD5 | 2dd54cdd363cb775c86e247f62bee26e |
|
BLAKE2b-256 | 2f1cecebff119675b6d08cd676e433d52e414c93e82db775fcf014d99aa5bec4 |