python小技巧

1. 字符串拼接(join的对象是列表):使用’’.join进行字符串拼接,而不是a += b这种形式。由于join将保证这个过程的时间复杂度为线性的,效率更高。道理不少人都知道,可是大多数人仍是喜欢用“+”,由于这个实在太简洁了。其实不少语言都提供了拼接字符串的方法或者相应的类,良好编程习惯从拼接字符串开始。编程

2. 异常类型:基于类的异常老是好过基于字符串的异常。咱们最好构造一个基于Exception的子类。
当抛出一个异常的时候,使用”raise ValueError(‘message’)”替代”raise ValueError, ’message’”的形式。
app

3. None判断:判断一个实例变量是否为空的时候,应该老是用’is’或者’is not’,而不要使用相等操做符。性能

4. 对象类型判断:对象类型的比较应该始终用isinstance()代替直接比较类型。例如:
使用if isinstance(obj, int): 而不是 if type(obj) is type(1):
spa

5. 字符串先后缀判断:在检查前缀或后缀时避免对字符串进行切片。用startswith()和endswith()代替,由于它们是明确的而且错误更少。例如:
使用if foo.startswith('bar'): 替代 if foo[:3] == 'bar':
对象

6. 变量值交换:在其余语言中,咱们常常这样交换两个变量的值。t=a; a=b; b=t;
可是在Python中,咱们还有一个简单的办法,a, b = b, a,而且这种方法更快,更酷。
内存


7. 列表解析(List Comprehension)List Comprehension是在Python2.0版本中加进入的,是一种更高效、简洁的for结构替代品,做为新手写上几个后就对它爱不释手,惊呼太好用了。
例子:将原始列表中的全部元素进行某种操做后赋值给新的列表。
若是用for循环,代码以下:
oldlist = [] 
for item in oldlist: 
newlist.append(func(item))
若是使用List Comprehension,代码以下:
newlist = [func(item) for item in oldlist]
咱们明显看到差异,3行变一行,代码可读性加强,并且性能也提高不少,听说基本能够达到C语言的速度。
List Comprehension还支持过滤功能,在列表生成过程当中套用for if字句,很是好用。示例以下:
evens = [even for even in range(10) if even % 2 == 0]
只须要一行,就将获得0到9的数字中的全部偶数,过滤掉了奇数。

8. 生成器表达式(Generator Expression):Python2.4中引入了Generator Expression。它功能上相似于List Comprehension,这你就要问了,为何要加入这个呢。由于Generator Expression更加高效,避免了生成整个列表,改善性能及内存占用,取而代之的是返回一个generator object,经过它迭代的返回列表中的每个值。
并且Generator Expression的使用方法也很简单,就是将List Comprehension中的中括号[]改为小括号(),示例以下:
newlist = (func(item) for item in oldlist)
这个返回的newlist其实并非一个list,而是前面提到的generator object,能够理解为列表的一个迭代器,相似于C++中的iter。 能够经过newlist.next()迭代得到列表中的每一项。
List Comprehension和Generator Expression实在是Python中的亮点,简洁高效,必定要常常用、时时用、秒秒用。
字符串