python – 是否有理由更喜欢__slots__的列表或元组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 是否有理由更喜欢__slots__的列表或元组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1256字,纯文字阅读大概需要2分钟。
内容图文
您可以使用list或tuple(或者任何可迭代的?)在新式python类中定义__slots__.创建实例后,类型仍然存在.
鉴于元组总是比列表更有效并且是不可变的,你有什么理由不想为__slots__使用元组吗?
>>> class foo(object):
... __slots__ = ('a',)
...
>>> class foo2(object):
... __slots__ = ['a']
...
>>> foo().__slots__
('a',)
>>> foo2().__slots__
['a']
解决方法:
首先,元组不比列表更有效;它们都支持来自C API代码的完全相同的快速迭代机制,并使用相同的代码进行索引和Python迭代.
更重要的是,__slots__机制实际上并不使用__slots__成员,除非在构造期间.这可能不是the documentation清楚解释的,但如果你仔细阅读了所有的要点,那么信息就在那里.
真的,它必须是真的.否则,这不起作用:
class Foo(object):
__slots__ = (x for x in ['a', 'b', 'c'] if x != 'b')
……更糟糕的是,这会:
slots = ['a', 'b', 'c']
class Foo(object):
__slots__ = slots
foo = Foo()
slots.append('d')
foo.d = 4
进一步证明:
>>> a = ['a', 'b']
>>> class Foo(object):
... __slots__ = a
>>> del Foo.__slots__
>>> foo = Foo()
>>> foo.d = 3
AttributeError: 'Foo' object has no attribute 'd'
>>> foo.__dict__
AttributeError: 'Foo' object has no attribute '__dict__'
>>> foo.__slots__
AttributeError: 'Foo' object has no attribute '__slots__'
因此,Foo中的__slots__成员实际上仅用于文档和内省目的.这意味着没有性能问题或行为问题,只是一种风格问题.
内容总结
以上是互联网集市为您收集整理的python – 是否有理由更喜欢__slots__的列表或元组?全部内容,希望文章能够帮你解决python – 是否有理由更喜欢__slots__的列表或元组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。