在数据库方向上相对来说能够容易推出开发规范和标准,但是你很少听到公司里面出针对开发同学的开发规范。我觉得其中的一个原因是程序猿比较执拗,以技术服人,经常彼此看不上,如果你出了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