在数据库方向上相对来说能够容易推出开发规范和标准,但是你很少听到公司里面出针对开发同学的开发规范。我觉得其中的一个原因是程序猿比较执拗,以技术服人,经常彼此看不上,如果你出了10个规范,估计能让他从另外的角度给你20个建议,如果给个样例,估计他能够给你变出很多的花样来改进,说你的不够极客风,所以干脆就参考官方文档吧。
开发方向有一个概念一直很火,那就是代码重构,代码的重构有思路和方法,而且实践性强,因为是在思路层面抽象了一层,其实适应面会更广。
简单参考了下Python代码重构的一些例子,自己也在这个基础上做了一些小的改动,一并分享出来。
假设我们有这样的一个基础数据结构 列表:
namelist = ['yang','jianrong','jeanron']
遍历我们常用的办法应该是简单的for循环了。
for item in namelist:
print item
显然这样的方法没法得到下标,还有什么办法呢。
使用range是一种思路。
for i in range(len(namelist)):
print i,'-->',namelist[i]
输出如下:
0 --> yang
1 --> jianrong
2 --> jeanron
但是相对来说,更建议使用enumerate
for idx,item in enumerate(namelist):
print idx,'-->',item
输出如下:
0 --> yang
1 --> jianrong
2 --> jeanron
然后我们创建另外一个新的列表 namelist2
namelist2=['jeanron100','yang']
然后遍历两个列表,注意两个列表的元素个数不同。
for i in range(len(namelist)):
print namelist[i]
print namelist2[i]
输出如下:
yang
jeanron100
jianrong
yang
jeanron
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
IndexError: list index out of range
明显下标溢出了。
可以使用如下的方式:
for item1,item2 in zip(namelist,namelist2):
print item1
print item2
yang
jeanron100
jianrong
yang
不过需要注意,namelist的输出结果集不是最完整的
在这个基础上如果更近一步,可以使用izip
from itertools import izip
for item1,item2 in izip(namelist,namelist2):
print item1
print item2
输出入下:
yang
jeanron100
jianrong
yang
替换变量
x=10
y=-10
常规的思路,我们需要一个中间变量
tmp=x
x=y
y=tmp
>>> print x,y
-10 10
但是不建议这么做,在Python里面,我们可以做得更简单些。
>>> x,y=y,x
>>> print x,y
10 -10
如果要通过下标输出列表数据
>>> print namelist
['yang', 'jianrong', 'jeanron']
常规的思路是这样的。
>>> first_name=namelist[1]
>>> last_name=namelist[2]
输出如下:
>>> print first_name,last_name
jianrong jeanron
我们可以稍作下改进,做下映射,和Python里面经典的 %s 值匹配是类似的。
>>> first_name,last_name,_=namelist
>>> print first_name
yang
>>> print last_name
jianrong
>>> print _
jeanron
还有一个是for else的使用。
比如我们做匹配的需求时,可以使用如下的条件。
condition = lambda name: len(name) == 4
如果要遍历列表查看数据,可以使用如下的方式:
found = False
for name in namelist:
if condition(name):
print 'Found',name
found = True
break
if not found:
print 'Not Found'
输出如下:
Found yang
这里的一个很大不同就是匹配到数据之后直接退出。
当然下面的方式看起来就比较正统了,也是建议的。
>>> for name in namelist:
... if condition(name):
... print 'Found',name
... else:
... print 'Not Found'
...
Found jean
Not Found
Not Found
Found yang