栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么解压缩比按索引访问要快?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么解压缩比按索引访问要快?

如果您看一下python字节码,那么拆包速度更快的原因变得非常明显:

>>> import dis>>> def unpack_or_index(t=(0, 1)):...     _, x = t...     x = t[1]... >>> dis.dis(unpack_or_index)  20 LOAD_FAST     0 (t)   3 UNPACK_SEQUENCE          2   6 STORE_FAST    1 (_)   9 STORE_FAST    2 (x)  3          12 LOAD_FAST     0 (t)  15 LOAD_ConST    1 (1)  18 BINARY_SUBSCR         19 STORE_FAST    2 (x)  22 LOAD_ConST    0 (None)  25 RETURN_VALUE

元组拆包操作是一个简单的字节码(

UNPACK_SEQUENCE
),而索引操作则必须在元组(
BINARY_SUBSCR
)上调用一个方法。解压缩操作可以在python评估循环中内联进行,而订阅调用需要使用来查找元组对象上的函数以检索值
PyObject_GetItem

UNPACK_SEQUENCE
操作码的源代码特殊情况下,蟒元组或列表解包,其中所述序列长度的长度参数精确匹配:

        if (PyTuple_CheckExact(v) && PyTuple_GET_SIZE(v) == oparg) { PyObject **items =      ((PyTupleObject *)v)->ob_item; while (oparg--) {     w = items[oparg];     Py_INCREF(w);     PUSH(w); } Py_DECREF(v); continue;        } // followed by an "else if" statement for a list with similar pre

上面的代码进入元组的本机结构,并直接检索值。无需使用繁重的调用,例如

PyObject_GetItem
必须考虑到对象可以是自定义python类的调用。

BINARY_SUBSCR
码只为Python优化
列表 ; 任何不是本地python列表的东西都需要
PyObject_GetItem
调用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号