我目前正在学习Python 3,并认为一些速度比较可能很整洁。因此,我创建了一些就地和一些临时列表函数,它们只是将1加到一个长整数列表中。
然而,结果对我来说真的很令人惊讶......似乎Python 3在每个用例中都比较慢:不同的循环测试,while循环,map函数和列表推导。
当然(参见下面的代码)它只是比较了就地列表突变或构建并返回临时列表的循环...例如, "标准" Python 3的地图,只是创建一个迭代器,仍然很快,但在某些时候,人们总是希望打印,写入或以某种方式可视化数据。因此,像list(map())
这样的东西应该在Python 3中相对常见?!
我在这里缺少什么?
对于循环,理解和映射,Python 3是否比Python 2慢?如果是这样,为什么?
Python 3.4时间:
> python3.4 func_speed_tests.py
list_comprehension.........1.2785s
for_loop...................1.9988s
for_loop_append............1.8471s
for_loop_range.............1.7585s
while_loop.................2.2539s
calc_map...................2.0763s
Python 2.7时间:
> python2.7 func_speed_tests.py
list_comprehension.........0.9472s
for_loop...................1.2821s
for_loop_append............1.5663s
for_loop_range.............1.3101s
while_loop.................2.1914s
calc_map...................1.9101s
以下是代码:
import timeit
from random import shuffle
# generate a long list of integers
mlst = list(range(0, 1000000))
# randomly sort the list
shuffle(mlst)
# number of benchmark passes
n = 10
#####################
# functions to time #
#####################
def list_comprehension(lst):
return [x + 1 for x in lst]
def for_loop(lst):
for k, v in enumerate(lst):
lst[k] = v + 1
def for_loop_append(lst):
tmp = []
for item in lst:
tmp.append(item + 1)
def for_loop_range(lst):
for k in range(len(lst)):
lst[k] += 1
return lst
def while_loop(lst):
it = iter(lst)
tmp = []
while it:
try:
tmp.append(next(it)+1)
except StopIteration:
break
return tmp
def calc_map(lst):
lst = map(lambda x: x + 1, lst)
return list(lst)
############################################
# helper functions for timing and printing #
############################################
def print_time(func_name):
print("{:.<25}{:.>8.4f}s".format(func_name, timer(func_name)))
def timer(func):
return timeit.timeit(stmt="{}(mlst)".format(func),
setup="from __main__ import mlst, {}".format(func),
number=n)
#################
# run the tests #
#################
print_time("list_comprehension")
print_time("for_loop")
print_time("for_loop_append")
print_time("for_loop_range")
print_time("while_loop")
print_time("calc_map")
答案 0 :(得分:1)
Python3比Python2慢一点。查看pystone benchmark。如果关注速度,请坚持使用Python 2.7.0 Release,这样可以获得更好的第三方软件包支持。