Python少打字小技巧.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Python少打字小技巧

Python少打字小技巧 说明:增加代码的描述力,可以成倍减少你的LOC,做到简单,并且真切有力 观点:少打字=多思考+少出错,10代码行比50行更能让人明白,以下技巧有助于提高5倍工作效率 1. 交换变量值时避免使用临时变量:(cookbook1.1) 老代码:我们经常很熟练于下面的代码 temp = x x = y y = temp 代码一: u, v, w = w, v, u?? 有人提出可以利用赋值顺序来简化上面的三行代码成一行 代码二: u, v = v, u?? 其实利用Python元组赋值的概念,可更简明 -- 元组初始化 + 元组赋值 2. 读字典时避免判断键值是否存在:(cookbook1.2) d = { key: value } 老代码: if key in d: print d[key] else: print not find 新代码: print d.get(key, not find)?? 3. 寻找最小值和位置的代码优化: s = [ 4,1,8,3 ] 老代码: mval, mpos = MAX, 0 for i in xrange(len(s)):? ? ? if s? mval: mval, mpos = s, i 新代码: mval, mpos = min([ (s, i) for i in xrange(len(s)) ]) 元组比较的特性,可以方便的写做一行 观点一:用Python编程,需要有“一字千金”的感觉;既然选择了Python,就不要在意单条语句的效率。 上面几点例子很基础,实际中将原始代码压缩1/5并不是不可能,我们之前一个子项目,C++代码270K 重构后Python代码只有67K,当然使用python的日志模块(logging),读写表格文本(csv)等,也功 不可末,最终代码变成原来的1/4,我觉得自己的寿命延长了三倍。。。下面优化几个常用代码: 4.?文件读取工作的最简单表达: 老代码:我们需要将文本文件读入到内存中 line = fp = open(text.txt, r) for line in fp: text += line 代码一: text = string.join([ line for line in open(text.txt)], ] 代码二: text = .join([ line for line in open(text.txt)])? ? 代码三: text = file(text.txt).read()?? 新版本的Python可以让你写出比1,2漂亮的代码(open是file的别名,这里file更直观) 5. 如何在Python实现三元式: 老代码:用惯C++,Java,C#不喜欢写下面代码 if n = 0: print positive else: print negitive 代码一:该技巧在 Lua里也很常见 print (n = 0) and positive or negitive 说明:这里的and和or相当于C中的:和?的作用,道理很简单,因为如果表达式为 真了那么后面的or被短路,取到positive;否则,and被短路,取到negitive 代码二: print (n = 0 and [positive] or [negitive])[0] 说明:将两个值组装成元组,即使positive是None, , 0 之类整句话都很安全 代码三: print (negitive, positive)[n = 0] 说明:(FalseValue, TrueValue)[Condition] 是利用了 元组访问 + True=1 两条原理 6. 避免字典成员是复杂对象的初始化:(cookbook1.5) 老代码: if not y in d: d[y] = { } d[y][x] = 3 新代码: d.setdefault(y, { })[x] = 3 如果成员是列表的话也一样: d.setdefault(key, []).append(val) 上面六点技巧加以发挥,代码已经很紧凑了,但是还没有做到“没有一句废话”可能有人怀疑真的能 减少1/5的代码么??我要说的是1/5其实很保守,Thinking in C++的作者后来用了Python以后 觉得Python甚至提高了10倍的工作效率。下面的例子可以进一步说明: 例子1:把文本的IP地址转化为整数 说明:需要将类似192.168.10.214的IP地址转化为 0x0C0A80AD6,在不用 inet_aton情况下 当C++/Java程序员正为如何进行文本分析,处理各种错误输入烦恼时,Python程序员已经下班: f = lambda ip: sum( [ int(k)*

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档