这是我编写的一个小程序来测量函数的速度,由于各种原因,这对我很重要:
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一样好。
在我看来:
range()
Python3不起作用
xrange()
在Python2中做过(至少
性能明智),它的工作方式
range()
做了。我在这里遗漏了什么吗?或者是时候开始放弃Python?
答案 0 :(得分:2)
1。 性能,python doc: '''3.0概括的最终结果是Python 3.0运行pystone基准测试比Python 2.5慢大约10%。最有可能的最大原因是为小整数移除了特殊套管。还有改进的余地,但会在3.0发布后发生!'''
2.范围和xrange之间的主要区别在于第二个产生一个发电机。和范围也产生一个生成器,在python 3.x中......没有区别