小编典典

python,del或delattr哪个更好?

all

这可能很愚蠢,但它已经在我的大脑后面唠叨了一段时间。

Python 为我们提供了两种从对象中删除属性的内置方法, del 命令字和 delattr 内置函数。我更喜欢 delattr
,因为我认为它更明确一点:

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

但我想知道它们之间是否存在内部差异。


阅读 72

收藏
2022-06-16

共1个答案

小编典典

第一个比第二个更有效。 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

这意味着第一次运行的速度 快(但在我的机器上并没有太大的差异——0.15 渭s)。

就像其他人所说的那样,当您要删除的属性是动态确定的时,您真的应该只使用第二种形式。

[编辑显示函数内部生成的字节码指令,编译器可以在其中使用LOAD_FASTLOAD_GLOBAL]

2022-06-16