Python3.1的性能仍然令人失望 - 它会变得更好吗?

时间:2010-12-11 16:52:50

标签: python performance python-3.x

这是我编写的一个小程序来测量函数的速度,由于各种原因,这对我很重要:

import time,sys

count = 10 * 1000 * 1000
t1 = time.time()

d = dict()
for i in xrange(0,count):
    d[i] = i
for i in xrange(0,count):
    d[i] = d[i]*i
for i in xrange(0,count):
    d[i] = d[i]-i
t2 = time.time()

print("time=%f" % (t2-t1))
print("size of dictionary: %d" % sys.getsizeof(d))

所以我在我的mac上用Python2.7运行了这个:

$ python2.7 pyspeed.py
time= 7.24679493904
size of dictionary: 402653464
$ python2.7 pyspeed.py
time= 7.23868012428
size of dictionary: 402653464
$ python2.7 pyspeed.py
time= 7.26046490669
size of dictionary: 402653464

现在,当我尝试在Python3.1中运行它时,它当然没有用,因为xrange已被折旧。我读过的所有文档都说,范围现在可以像xrange那样工作。所以这是重写的程序:

import time,sys

count = 10 * 1000 * 1000
t1 = time.time()

d = dict()
for i in range(0,count):
    d[i] = i
for i in range(0,count):
    d[i] = d[i]*i
for i in range(0,count):
    d[i] = d[i]-i
t2 = time.time()

print("time=%f" % (t2-t1))
print("size of dictionary: %d" % sys.getsizeof(d))

Python3.1的性能:

$ python3.1 pyspeed.py
time=7.869891
size of dictionary: 402653464
$ python3.1 pyspeed.py
time=7.849537
size of dictionary: 402653464
$ python3.1 pyspeed.py
time=7.879416
size of dictionary: 402653464

慢了7%。

只是为了预感,我尝试在Python2.7下使用range代替xrange运行程序,并得到几乎相同的结果:

$ python2.7 pyspeed.py
time=7.735200
size of dictionary: 402653464
$ python2.7 pyspeed.py
time=7.743711
size of dictionary: 402653464
$ python2.7 pyspeed.py
time=7.762192
size of dictionary: 402653464

仍然比Python3.1更好,但不如2.7与xrange一样好。

在我看来:

  1. Python3.1仍然很重要 比Python2慢。为什么不呢 快点?
  2. 尽管文档声明了range() Python3不起作用 xrange()在Python2中做过(至少 性能明智),它的工作方式 range()做了。
  3. 我在这里遗漏了什么吗?或者是时候开始放弃Python?

1 个答案:

答案 0 :(得分:2)

1。 性能,python doc: '''3.0概括的最终结果是Python 3.0运行pystone基准测试比Python 2.5慢大约10%。最有可能的最大原因是为小整数移除了特殊套管。还有改进的余地,但会在3.0发布后发生!'''

2.范围和xrange之间的主要区别在于第二个产生一个发电机。和范围也产生一个生成器,在python 3.x中......没有区别