python中的字典和类的区别_Python:我应该使用类还是字典?

我认为每个人的用法对我来说太主观了,所以我只是坚持数字。

我比较了创build和更改字典中的variables,new_style类和new_style类带槽的时间。

这是我用来testing它的代码(这有点乱,但它做的工作。)

import timeit class Foo(object): def __init__(self): self.foo1 = 'test' self.foo2 = 'test' self.foo3 = 'test' def create_dict(): foo_dict = {} foo_dict['foo1'] = 'test' foo_dict['foo2'] = 'test' foo_dict['foo3'] = 'test' return foo_dict class Bar(object): __slots__ = ['foo1', 'foo2', 'foo3'] def __init__(self): self.foo1 = 'test' self.foo2 = 'test' self.foo3 = 'test' tmit = timeit.timeit print 'Creating...\n' print 'Dict: ' + str(tmit('create_dict()', 'from __main__ import create_dict')) print 'Class: ' + str(tmit('Foo()', 'from __main__ import Foo')) print 'Class with slots: ' + str(tmit('Bar()', 'from __main__ import Bar')) print '\nChanging a variable...\n' print 'Dict: ' + str((tmit('create_dict()[\'foo3\'] = "Changed"', 'from __main__ import create_dict') - tmit('create_dict()', 'from __main__ import create_dict'))) print 'Class: ' + str((tmit('Foo().foo3 = "Changed"', 'from __main__ import Foo') - tmit('Foo()', 'from __main__ import Foo'))) print 'Class with slots: ' + str((tmit('Bar().foo3 = "Changed"', 'from __main__ import Bar') - tmit('Bar()', 'from __main__ import Bar')))

这里是输出…

创build…

Dict: 0.817466186345 Class: 1.60829183597 Class_with_slots: 1.28776730003

更改variables…

Dict: 0.0735140918748 Class: 0.111714198313 Class_with_slots: 0.10618612142

所以,如果你只是存储variables,你需要速度,并不需要你做很多计算,我推荐使用一个字典(你总是可以做一个看起来像一个方法的函数)。 但是,如果你确实需要类,记住 – 总是使用__ slots __ 。

注意:

我用new_style和old_style类testing了'Class'。 事实certificate,old_style类创build速度较快,但修改速度较慢(如果您在紧密的循环中创build大量类,则不会太多但意义重大(提示:您做错了))。

另外,由于我的老旧速度很慢,因此在计算机上创build和更改variables的时间可能会有所不同。 确保你自己testing看到“真实”的结果。

编辑:

我后来testing了namedtuple:我不能修改它,但创build10000个样本(或类似的东西)花了1.4秒,所以字典确实是最快的。

如果我改变字典function ,包括键和值,并返回字典,而不是包含字典的variables,当我创build它给我0.65而不是0.8秒。

class Foo(dict): pass

创build就像一个有插槽的类,改变variables是最慢的(0.17秒),所以不要使用这些类 。 去一个字典(速度)或从对象派生的类('语法糖果')

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值