关注公众号[sylan215],获取最新更新。

Python 代码优化实践

上一篇 / 下一篇  2018-07-09 23:10:01 / 个人分类:Python

最近在用Python写一个一键替换文件的脚本文件,大概的功能是,向程序传递一个本地或SFTP目录的参数,程序可以把指定目录所有文件替换到特定应用程序的对应目录。程序提供了如下2种命令行调用:

Usage: demo.py [sourcedir] 

Usage: demo.py [sourcedir] bydir

第一种调用的实际操作是:读取特定应用程序目录所有文件,并获取全路径作为一个集合,再把参数文件夹中文件按文件名与集合中文件进行匹配,如果匹配上则执行替换操作。

第二种调用的实际操作是:按参数文件夹的目录存放的路径,完整替换到应用程序的对应目录。

下面是最初的代码实现:

先简单说明下各函数的功能:

ReplaceLocalFiles:主要功能函数,实现具体的替换操作;

RelpaceFiles:根据传入参数判断是否是网络路径,如果是则先把文件下载到本地,然后调用ReplaceLocalFiles执行替换操作; 

ReplaceAllFiles:做了一些环境准备的事情,然后调用实际的功能函数

RelpaceFiles进行干活; printandwritelog:记录日志并输出; 

checkinst:检查目标程序是否安装,如果安装则返回安装路径; 

getallfiles:获取目标应用程序的文件全路径集合; 

checkcount:获取指定文件名在目标应用程序文件集合中出现的次数 

netutilex:一个独立的操作SFTP的库文件。

从目前的代码中能发现至少有2个地方可以优化

  1. 函数之间需要传递的参数太多了,可以看看是否全部必要,考虑下如何精简;
  2. 部分业务逻辑太细化,有重复的代码实现,导致实现看起来比较臃肿。

对于第1点,优化的思路是:对于非所有函数都必须调用的参数,尽可能的固化到实际使用的函数中,避免各函数仅仅做了传递员的工作。

对于第2点,优化的思路是:合并同类项,对于重复代码的部分,尽可能提取到共用逻辑中实现。

下面是优化后的代码:

具体的优化操作有:

把函数checkinst和getallfiles的调用实现放到了其返回值使用者ReplaceLocalFiles的函数体内,减少了2个参数的多次传递; 

把函数ReplaceLocalFiles中具体的copy2操作进行了提取,因为bydir和非bydir最终都会走到这个操作; 

把函数ReplaceFiles中对函数ReplaceLocalFiles的操作进行了提取,同时把函数ReplaceAllFiles和ReplaceFiles进行了合并。

优化后的结果看起来有没有清爽很多?


TAG: 文件 循环 优化 Python python 遍历

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

sylan215

sylan215

请关注公众号[sylan215]

我的栏目

日历

« 2018-07-19  
1234567
891011121314
15161718192021
22232425262728
293031    

我的存档

数据统计

  • 访问量: 484
  • 日志数: 5
  • 建立时间: 2018-07-03
  • 更新时间: 2018-07-18

RSS订阅

Open Toolbar