gpt4 book ai didi

python - getattr() 与 __dict__ 查找,哪个更快?

转载 作者:太空狗 更新时间:2023-10-29 18:13:34 25 4
gpt4 key购买 nike

我可以使用 object.__dict__[some_key]getattr(object, some_key) 动态查找对象属性值。哪个更快或更好,为什么?

>>> class SomeObject:
... pass
...
>>> so = SomeObject()
>>> so.name = 'an_object'
>>> getattr(so,'name')
'an_object'
>>> so.__dict__['name']
'an_object'

最佳答案

你最好使用 getattr()而不是直接转到 __dict__结构。

不是因为它更快或更慢,而是因为官方 API 适用于所有 情况,包括那些__dict__ 的类(例如,当使用 __slots__ 时),或者当一个对象实现了 __getattr__ 时或 __getattribute__钩子(Hook),或者当有问题的属性是 descriptor (例如 property )或类属性。

如果您想知道任何一个 python 语句或技术是否比另一个更快,请使用 timeit module 衡量差异:

>>> import timeit
>>> class Foo(object):
... pass
...
>>> foo = Foo()
>>> foo.bar = 'spam'
>>> timeit.timeit("getattr(foo, 'bar')", 'from __main__ import foo')
0.2125859260559082
>>> timeit.timeit("foo.__dict__['bar']", 'from __main__ import foo')
0.1328279972076416

你可以看到直接访问 __dict__ 更快,但是 getattr() 做了更多的工作。

关于python - getattr() 与 __dict__ 查找,哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14084897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com