给Python内置函数取别名的目的是什么?

9
我正在阅读Python headq.merge 的代码,看起来他们似乎为内置函数创建了别名,比如_len = len。只是想知道这样做的目的是什么?
非常感谢!

也许这样他们可以在将来使用一个返回可迭代长度的不同函数,而无需更改超过一行的代码? - galfisher
@vaultah 谢谢你提供的参考! - Bubble Bubble Bubble Gut
1个回答

14

背景是他们在函数内部将一个局部名称分配给一个全局名称:

def merge(*iterables):
    ...
    _len = len
    ...

预期_len将被多次使用,而访问局部名称比重复查找全局名称更快。是否这在整个运行时间中产生了显着差异只能通过基准测试您的代码来确定。


1
从技术上讲,它是一个内置名称。您在全局范围内找不到 len - Aran-Fey
1
@chepner 哇,太棒了,谢谢伙计。 - Bubble Bubble Bubble Gut
@vaultah 看起来你是对的 - dis输出显示指令为LOAD_GLOBAL。但这可能是CPython实现的细节,也可能不是。 - Aran-Fey
2
@Aran-Fey: 我怀疑这是强制性的 - 编译器在编译阶段无法知道代码实际运行时它是否会变成内置函数或“常规”全局函数。更一般地说,您可以拥有一个代码对象,它将根据其运行环境获取内置函数或用户定义函数。 - Matteo Italia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接