工具:cProfile
测试方法:目录下有1152个文件,分别用map、列表解析和生成器方法,删除所有文件。进行cpu时间对比。
一.map函数方法
def
s():
os.chdir( ' 1 ' )
list = os.listdir( ' . ' )
map(os.remove,list)
print ' done '
if __name__ == ' __main__ ' :
cProfile.run( ' s() ' ,)
os.chdir( ' 1 ' )
list = os.listdir( ' . ' )
map(os.remove,list)
print ' done '
if __name__ == ' __main__ ' :
cProfile.run( ' s() ' ,)
答案:0.053 cpu time.
二.纯正的列表解析方法
def
s():
os.chdir( ' 1 ' )
list = os.listdir( ' . ' )
[os.remove(item) for item in list]
print ' done '
if __name__ == ' __main__ ' :
cProfile.run( ' s() ' ,)
os.chdir( ' 1 ' )
list = os.listdir( ' . ' )
[os.remove(item) for item in list]
print ' done '
if __name__ == ' __main__ ' :
cProfile.run( ' s() ' ,)
答案:0.675 cpu time。
三.加入生成器
def
s():
os.chdir( ' 1 ' )
list = os.listdir( ' . ' )
for i in list:
yield i
def main():
[os.remove(i) for i in s()]
print ' done '
if __name__ == ' __main__ ' :
cProfile.run( ' main() ' ,)
os.chdir( ' 1 ' )
list = os.listdir( ' . ' )
for i in list:
yield i
def main():
[os.remove(i) for i in s()]
print ' done '
if __name__ == ' __main__ ' :
cProfile.run( ' main() ' ,)
答案:0.523 cpu time。
当然,我这种测试方法有一定局限性,只是测试删除文件。但之所以举这个例子,是想纯正的看看他们三个的速度,而不要让时间花在大量的“其他处理”上。
得出结论:
1.map最快:因为内部采用的是C的循环嘛。
2.生成器次之。我这种写法是最传统的,如果优化,肯定再好一些。
3.列表解析。
自己做完实验后,才知道实际中用哪种效率更高。