python - python,del或delattr哪个更好?

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

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_FASTLOAD_GLOBAL]

https://stackoverflow.com/questions/1120927/

相关文章:

linux - 如何在 Linux 上使用 grep 搜索包含 DOS 行尾 (CRLF) 的文件?

linux - 如何来回反向搜索?

python - 在 python shell 中按箭头键时看到转义字符

linux - 重命名文件和目录(添加前缀)

linux - 什么进程正在使用我所有的磁盘 IO

python - 在调用者线程中捕获线程的异常?

linux - 查找和复制文件

python - BeautifulSoup 获取 href

c - C 到毫秒是否有替代 sleep 功能?

python - 在python中通过分隔符拆分字符串