梅小雨20190919-3效能分析
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628
• 要求0 以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
要求0 以《战争与和平》作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数
测试方法:输入ptime wf -s < war_and_peace.txt
第一次测试时间截图:

第二次测试时间截图:

第三次测试时间截图:

统计表:

要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。
瓶颈:字符转换过程中所用时间过多,可以通过函数封装的方法进行代码效率的优化
while True:
lastchar = word1[-1:]
if lastchar in [",", ".", "!", "?", ";", '"',"-","*","%"]:
word2 = word1.rstrip(lastchar)
word1 = word2
else:
word2 = word1
break
while True:
firstchar = word2[0:]
if firstchar in [",", ".", "!", "?", ";", '"',"-","*","%"]:
word3 = word2.lstrip(firstchar)
word2 = word3
else:
word3 = word2
break
要求2 通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。 (5分)
要求 分析为什么此处是瓶颈。要求 profile需要得到函数的运行时间和次数。仅得到CPU和内存占用,不得分。
输入python -m cProfile -s time wf.py -s < war_and_peace.txt

最耗费时间的3个函数:

要求3 根据瓶颈,"尽力而为"地优化程序性能。 (5分)
修改后的代码片段:
while True: lastchar = word1[-1:] for lastchar in '\r .,"': word2 = word1.rstrip(lastchar) word1 = word2 else: word2 = word1 break while True: firstchar = word2[0:] for lastchar in '\r .,"': word3 = word2.lstrip(firstchar) word2 = word3 else: word3 = word2 break # build a wordList of lower case modified words word_list2.append(word3)
对单词格式化部分的字符进行封装
要求4:再次profile,给出在要求1 中的最花费时间的3个函数此时的花费。

此时三个函数的花费:

再测试三次:


要求5 程序运行时间。根据在教师的机器 (Windows8.1) 上运行的速度排名,分为3档。此题得分,第1档20分, 第2档10分,第3档5分。功能测试不能通过的,0分。
供老师测试的git地址为
https://e.coding.net/meixiaoyu/xn.git

浙公网安备 33010602011771号