Python代码重构参考

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

参考链接:https://www.douban.com/note/634885269/

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-08-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏landv

C语言介绍

4862
来自专栏Pythonista

time模块

在Python中,通常有这三种方式来表示时间,时间戳,元组(struct_time)、格式化的时间字符串:

1402
来自专栏Python小屋

微课系列(四):Python中map对象的几种用法和注意事项

在Python中,map、filter、enumerate、zip、reversed等对象除了惰性求值之外,还有个共同的特点是“其中的元素只能使用一次”,这一点...

862
来自专栏编程

手把手教你半个小时用python语言编程出你的第一个程序

学习目标 知道有序的软件开发过程的步骤。 了解遵循输入、处理、输出(IPO)模式的程序,并能够以简单的方式修改它们。 了解构成有效Python标识符和表达式的规...

4065
来自专栏王亚昌的专栏

C++多线程编程学习二 [类中封装互斥量的设计]

      之前我也提到过,如果一个类的数据成员中在多线程环境中可能会被竞争使用时,一定要在类中解决这个问题,而不是在代码编写过程中在每次使用时去申请或释放,这...

911
来自专栏韩伟的专栏

基于对象和面向对象

“基于对象”是“面向对象”一次动态化变迁,它依赖于现代语言的动态特性,让方法和属性统一起来;用组合取代继承;以函数对象查找取代多态的方法调用。这些变化让面向对象...

1.5K0
来自专栏Crossin的编程教室

【Python 第51课】 and-or技巧

今天介绍一个python中的小技巧:and-or 看下面这段代码: a = "heaven" b = "hell" c = True and a or b p...

2899
来自专栏web前端教室

【视频】- 5分钟学习<函数式编程>

温馨提示:视频请点此观看 // 视频文字版: JavaScript 函数式编程是一个存在了很久的话题, 现在ES6语法对于函数式编程更为友好,所以开始变的更...

2466
来自专栏coding for love

JS进阶系列01-JS的弱类型和动态类型

首先,我们要弄清楚编程语言的两组划分,即弱类型和强类型,动态类型和静态类型。下面有一幅图,非常详细地说明了它们各自的定义和区别。

1443
来自专栏带你撸出一手好代码

kotlin语言使用初体验(一)

居说谷歌新认的干儿子kotlin极为受宠,隐隐有替代Java在 android平台老大位置的趋势。kotlin有谷歌撑腰,加上自己的底子也厚,再之与Java无缝...

3465

扫码关注云+社区

领取腾讯云代金券