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

为什么dict.get(key)的运行速度比dict [key]慢

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

为什么dict.get(key)的运行速度比dict [key]慢

Python必须为

dict.get()

  • get
    是一个属性,因此Python必须进行查询,然后将找到的描述符绑定到字典实例。
  • ()
    是一个调用,因此必须将当前帧压入堆栈,必须进行调用,然后必须再次从堆栈中弹出该帧以继续。

[...]
与一起使用的表示法
dict
不需要单独的属性步骤或帧推入和弹出。

使用Python字节码反汇编程序

dis
时,您可以看到不同之处:

>>> import dis>>> dis.dis(compile('d[key]', '', 'eval'))  10 LOAD_NAME     0 (d)   3 LOAD_NAME     1 (key)   6 BINARY_SUBSCR   7 RETURN_VALUE>>> dis.dis(compile('d.get(key)', '', 'eval'))  10 LOAD_NAME     0 (d)   3 LOAD_ATTR     1 (get)   6 LOAD_NAME     2 (key)   9 CALL_FUNCTION 1  12 RETURN_VALUE

因此

d[key]
表达式只需要执行一个
BINARY_SUBSCR
操作码,而
d.get(key)
添加一个
LOAD_ATTR
操作码。
CALL_FUNCTION
它比
BINARY_SUBSCR
内置类型要昂贵得多(带有
__getitem__
方法的自定义类型仍然要进行函数调用)。

如果您的 大多数 键都存在于字典中,则可以使用它

try...except KeyError
来处理丢失的键:

try:    return mydict['name']except KeyError:    return None

如果没有异常,则异常处理很便宜。



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

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

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