【发布时间】:2011-06-01 06:52:21
【问题描述】:
最后,我在 python 中编写了一个简单的排列生成器(实现了 Knuth 在“艺术... 4”中描述的“普通更改”算法)。 我很好奇python2和python3在执行时间上的差异。 这是我的功能:
def perms(s):
s = tuple(s)
N = len(s)
if N <= 1:
yield s[:]
raise StopIteration()
for x in perms(s[1:]):
for i in range(0,N):
yield x[:i] + (s[0],) + x[i:]
在 python3 版本中,我只是将 print x 更改为 print(x),因为 print 是 py3 中的一个函数。 我都使用 timeit 模块进行了测试。
我的测试:
$ echo "python2.6:" && ./testing.py && echo "python3:" && ./testing3.py
python2.6:
args time[ms]
1 0.003811
2 0.008268
3 0.015907
4 0.042646
5 0.166755
6 0.908796
7 6.117996
8 48.346996
9 433.928967
10 4379.904032
python3:
args time[ms]
1 0.00246778964996
2 0.00656183719635
3 0.01419159912
4 0.0406293644678
5 0.165960511097
6 0.923101452814
7 6.24257639835
8 53.0099868774
9 454.540967941
10 4585.83498001
如您所见,对于少于 6 个参数的数量,python 3 更快,但随后角色颠倒,python2.6 表现更好。 由于我是python编程的新手,我想知道为什么会这样?或者也许我的脚本更适合 python2?
提前感谢您的友好回答:)
【问题讨论】:
-
请使用正确的格式。
-
首先,使用
{}按钮格式化您的代码。然后解释为什么这很重要。 -
`我只是想知道python2和python3之间的区别是什么导致了这个`。 Python3 与 python 2 有很大不同。它们甚至不向后兼容。您到底在寻找什么可以回答您的问题。您想获得每个版本的 C 代码吗?
-
"几乎相同的脚本,只是移植到 python3" 您是否对脚本进行了更改?如果是这样,您究竟做了哪些改变?请用您所做的确切更改更新问题。
-
@marcog:“假设”......总是一个错误。而“微不足道”的变化可以解释微不足道的时间差异。
标签: python testing time python-3.x execution