第一个比第二个更有效。
del foo.bar编译为两个字节码指令:
20 LOAD_FAST 0 (foo) 3 DELETE_ATTR 0 (bar)
而
delattr(foo, "bar")需要五个:
20 LOAD_GLOBAL 0 (delattr) 3 LOAD_FAST 0 (foo) 6 LOAD_ConST 1 ('bar') 9 CALL_FUNCTION 2 12 POP_TOP
这意味着第一个运行速度会 稍 快(但这并不是一个很大的差异–在我的机器上为.15μs)。
就像其他人所说的那样,您真正应该仅在动态确定要删除的属性时才使用第二种形式。
[编辑以显示函数内部生成的字节码指令,编译器可以在其中使用
LOAD_FAST和
LOAD_GLOBAL。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)