这可能很愚蠢,但它已经在我的大脑后部唠叨了一段时间。
Python 为我们提供了两种从对象中删除属性的内置方法,del 命令字和 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
这意味着第一次运行的速度略快(但差别不大——在我的机器上为 0.15 μs)。
正如其他人所说,当您要删除的属性是动态确定时,您真的应该只使用第二种形式。
[编辑显示函数内部生成的字节码指令,其中编译器可以使用 LOAD_FAST
和 LOAD_GLOBAL
]
https://stackoverflow.com/questions/1120927/