在python,del或delattr中哪个更好?

问题:

这可能是愚蠢的,但是它一直在n ging我脑后。
Python给了我们两种从对象中删除属性的内置方式,德尔命令字和delattr内置函数。我更喜欢delattr,因为我觉得它有点更明确:

del foo.bar
delattr(foo, "bar")

但是我想知道他们之间是否有差别。

回答:

第一个比第二个更有效率。 del foo.bar编译为两个字节码指令:

  2           0 LOAD_FAST                0 (foo)
              3 DELETE_ATTR              0 (bar)

delattr(foo, "bar")需要五个:

  2           0 LOAD_GLOBAL              0 (delattr)
              3 LOAD_FAST                0 (foo)
              6 LOAD_CONST               1 ('bar')
              9 CALL_FUNCTION            2
             12 POP_TOP             

这转化为第一次运行slightly更快(但在我的机器上并不是巨大的差异.15μs)。
像其他人一样,您应该真正只使用第二种形式,当您删除的属性是动态确定的。
[编辑显示函数内生成的字节码指令,编译器可以使用LOAD_FASTLOAD_GLOBAL

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Which is better in python, del or delattr?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

37 − 29 =