当前位置:  开发笔记 > 编程语言 > 正文

python:使用类而不是字典的开销?

如何解决《python:使用类而不是字典的开销?》经验,为你挑选了3个好方法。

首先,我想指出我了解OOP概念并理解字典和类之间的差异.我的问题是在这种情况下有意义的设计是明智的:

我在python中设计一个webapp,我必须代表一个像书对象的东西.书籍的章节和章节都有标题和内容.为简单起见,我们可以说内容是纯文本.

我的问题是,我应该制作书籍和章节课程或词典吗?我知道使用book.chapter而不是book ['chapter']看起来更整洁,如果我将来最终有方法,将它们放入书类可能是有意义的.但是,我想知道使用类而不是将信息存储在字典中是否有任何开销?

如果我不想每次都从数据库中实例化一个book对象并将其存储为pickle,那么如果我从类中添加/删除数据成员,我就不得不担心与过去的book对象不兼容.我觉得它在字典中处理这个问题会更容易.关于使用词典而不是类是否有意义的任何指针?



1> Hank Gay..:

这是非常不可能在你的应用程序中的瓶颈,所以不必担心性能可能是在浪费时间.但是,如果这是瓶颈,或者你只是有一些时间在手上,请考虑使用namedtuple.它结合了a的不变性和低内存占用tuple以及类属性的良好语法.


+1提及namedtuple.如果您使用的是Python> = 2.6,那么它绝对是一个很好的选择.
+1:这不是"可能浪费时间".这是浪费时间.所有Web框架都使用类.只需使用课程.

2> Daniel Pryde..:

一些想法:

    如果从字典开始,您可以随后切换到实现映射协议(或子类dict)的自定义类.所以这可能是一个很好的起点.

    您可以定义要使用的自定义Python对象__slots__,如果您有大量对象,这将更快,更高效.

    如果你使用一个自定义Python对象,将来用C语言编写的对象将更容易替换它.(我从来没有尝试过,但我希望从C中继承dict是一个棘手的命题.)



3> holdenweb..:

你实际上总结了很好的权衡.似乎很多人对性能过早担心.我建议你在网上搜索"Knuth premature optimization",而不是重复关于这个主题的标准建议.事实上,对于已知结构的对象,使用基于类的对象比使用dicts更快乐.

同样,您希望每次从数据库中读取(实例)数据时不实例化对象,这表示对程序设计的错误部分略微不健康.从数据属性创建一个类的实例只需要很少的时间,并且通过方法添加行为的便利性非常值得额外的复杂性.

使用带有常量下标的dict来引用数据对象的元素似乎是错误的.您正在有效地模拟Python的命名空间机制并创建许多不必要的字符串常量(这些常量不一定由解释器合并).如果你真的对速度感兴趣,为什么不使用一个列表,字段名称的符号常量?答案:因为以这种方式扭曲你的代码是错误的,因为在所有情况下99%的情况(我刚刚从我的屁股中取出的数字)不会被注意到因为应用程序无论如何都不受CPU限制.

以最简单的方式编写程序.如果它运行良好并且运行得足够快,请继续执行下一个任务.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有