当前位置: 首页 > 面试题库 >

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

刘意
2023-03-14
问题内容

这可能很愚蠢,但已经困扰了我一段时间。

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

这意味着第一个运行速度会 快(但这并不是一个很大的差异–在我的机器上为.15μs)。

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

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



 类似资料:
  • 问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(

  • 我是一个初学者,我正在开发一个Android应用程序,它会在一定的延迟(以天为单位)后继续向用户发送短信。我希望用户一旦注册就应该收到短信,不管他是否登录。短信内容和手机号码是从database.So获取的,经过研究,我发现了两种方法。 > 预定执行人服务 报警管理器 问题是,当手机关闭或重新启动时,警报管理器将关闭。预定的礼宾服务也是如此吗?使用执行器服务时,我应该在线程池中使用多少个线程?

  • 问题内容: python网页或php网页哪个更快? 有谁知道挂架(或任何其他框架)的速度与用php创建的类似网站相比如何? 我知道通过cgi提供服务的python基本网页比php慢,因为每次启动时间都长。 我喜欢使用挂架,如果它比php慢,我仍然会使用它。但是,如果挂架比php快,我也许可以最终说服我的雇主允许我将网站转换为挂架。 问题答案: 听起来您不想比较两种 语言 ,但是您想比较两种 Web

  • 当开发一个需要我唯一识别手机用户的应用程序时。我希望得到一些关于使用手机UDID还是IMEI的建议。使用这两种方法有什么优点/缺点吗。如有任何意见,将不胜感激

  • 问题内容: 在Python中调用变量。这是立即释放已分配的内存还是仍在等待垃圾收集器收集?像在Java中一样,显式调用对何时释放内存没有影响。 问题答案: del语句不会回收内存。它将删除引用,这会减少该值的引用计数。如果计数为零,则可以回收内存。CPython将立即回收内存,无需等待垃圾收集器运行。 实际上,仅垃圾回收器才需要回收循环结构。 正如Waleed Khan在他的评论中所说,Pytho

  • 问题内容: 我有这个表达: 这些元素的(,,)有优先权? 您能用方括号显示操作顺序吗? 问题答案: 首先,然后,然后。 您的表情将被评估为。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

  • 本文向大家介绍C#中哪个更好的System.String或System.Text.StringBuilder类?,包括了C#中哪个更好的System.String或System.Text.StringBuilder类?的使用技巧和注意事项,需要的朋友参考一下 主要区别是StringBuilder是Mutable,而String是Immutable。 字符串是不可变的,不可变是指如果您创建字符串对象

  • 问题内容: 我真的想不出python为什么需要关键字的任何原因(大多数语言似乎没有类似的关键字)。例如,可以删除变量而不是删除变量。从字典中删除时,可以添加一个方法。 是否有任何理由保留在python中,或者它是Python的垃圾收集日的痕迹? 问题答案: 首先,除了局部变量,你还可以进行其他操作 两者都应该明显有用。其次,del对局部变量使用可使意图更清晰。比较: 至 我知道在这种情况下,目的是