【偷懒技巧无敌版】Python偷懒小技巧,让你快快乐乐上班,提高十倍工作效率


说明:增加代码的描述力,可以成倍减少你的LOC,做到简单,并且真切有力
观点:少打字=多思考+少出错,10代码行比50行更能让人明白,以下技巧有助于提高10倍工作效率

请添加图片描述

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 ]

老代码:

python学习交流:770699889 ###
mval, mpos = MAX, 0
for i in xrange(len(s)):
    if s[i] < mval: 
    	mval, mpos = s[i], i

新代码:

mval, mpos = min([ (s[i], i) for i in xrange(len(s)) ])

元组比较的特性,可以方便的写做一行

观点一:用Python编程,需要有“一字千金”的感觉;既然选择了Python,就不要在意单条语句的效率。

上面几点例子很基础,实际中将原始代码压缩1/5并不是不可能,我们之前一个子项目,C++代码270K
重构后Python代码只有67K,当然使用python的日志模块(logging),读写表格文本(csv)等,也功
不可末,最终代码变成原来的1/4,我觉得自己的寿命延长了三倍。。。下面优化几个常用代码:

4. 文件读取工作的最简单表达:

老代码:我们需要将文本文件读入到内存中

python学习交流:770699889 ###

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#不喜欢写下面代码

python学习交流:770699889 ###
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)

老代码:

python学习交流:770699889 ###
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甚至提高了20倍的工作效率。

ok,文章分享到这里就结束了,有什么不懂的可以直接问我哦
觉得对你有帮助的话

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值