1、range与xrange\zip与izip
range([start],stop[,step]),产生一个序列,默认从0开始
xrange([start],stop[,step]),生成器,一次产生一个xrange对象,节省了内存,默认从0开始
zip([iterable, ...]),产生一个元组序列,每一个元组中的元素从各个list的第n个取得
izip([iterable, ...]),生成器,一次产生一个元组,节省了内存
2、sum
接受一个可迭代对象:sum(iterable[, start])
3、is操作符检查两个对象是否相同,==检查两个对象是否相等,isinstance检查一个对象类型
4、enumerate
python提供的首选的循环方式并不需要以来索引,但很多时候我们需要用到他,这时enumerate为此而生
for i,item in enumerate(list):
print i,tiem
这种方法是快于一下这种的:
for i in xrange(len(list)):
print i,list[i]
5、print不换行,在行尾加一个逗号即可:print a,
6、避免隐式的共享引用创建二维列表
multilist = [[0 for col in range(5)] for row in rang(10)]
以下方式将导致隐式共享引用:
multilist = [[0] * 5] * 10
7、二维阵列变换
arr = [[1,2,3],[4,5,6],[7,8,9]]
print map(list,zip(*arr))
zip接受一个可迭代对象列表,将每个列表按位置对应成元组,map返回对每个元组实行了list化的结果
8、*args和**kwds语法
*args用于接收任意基于位置的参数,可以是任何可迭代对象
**kwds用于接收任意命名的参数,类似于字典,例子:a=1,b=2,c=3,d=4这样的参数传递
确保*args和**kwds在所有参数后面,如果两者同时出现,确保**kwds在*args之后
9、迭代器
当一个类实现了__iter__这个函数,那这个类就是可迭代的
如果它还实现了 next ( self ) ,那它就称为迭代器
当Python在执行for循环时,会先调用container的__iter__()方法来获得container的迭代器,其实就是将container转化成迭代器(iterator)。然后它会重复调用迭代器(iterator)的
next()方法,直到迭代器(iterator)抛出StopIteration的异常。一旦这个异常抛出,for循环就结束了。 iter()函数用来生成一个迭代器,每次可以调用该迭代器的next()函数,如下:
a = [122, 221, 333]
b = iter(a)
b.next()
b.next()
b.next()
10、callable(object)
检查对象object是否是可以被调用的,类是可以被调用的,类的实例是不可以被调用的,除非类中声明了__call()__方法
11、hasattr(object, name)和getattr(object, name [, defalut])和delattr(object,name)和setattr(object,name,value)
hasattr()判断对象object是否包含名为name的属性
getattr()获得一个对象object的名为name的属性值,默认值为default
delattr()函数在object对象许可时,删除object对象的name属性
setattr()将object参数的name属性设置为value参数值
12、globals()和locals()
globals()获得一个描述当前全局符号表的字典
locals()获得当前本地符号表的字典
13、chr()和ord()
chr()将一个ASCII值转换为字符
ord()将一个字符转换为ASCII值
14、divmod(a,b)
返回商和余数的元组
15、repr(object)
返回对象的字符串表示
16、round(x,[:n])
round()函数返回浮点型参数x舍入到十进制小数点后n位的值
17、exec语句
exec语句被设计为执行能使用函数和语句的任意组合的python的任何代码片段。执行的代码访问相同的全局定义和局部定义的对象、类和方法或函数
18、help()
获取帮助信息
19、lambda函数
Python 支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做 lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数的地方
def f(x):
return x+2
可以改写成f = lambda x:x+2
另一个例子,apihelper.py 中的 lambda 函数:
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
前面的判断语句中,lambda的值永远是True,不论lambda函数的返回值是什么
20、map()和zip()
a=[1,2];b=[3,4];c=[5,6]
map(None,a,b,c)和zip(a,b,c)是一样的哦
21、python的三元运算符
'true' if True else 'false'
'true' if False else 'false'
22、字符串翻转
'hello world'[::-1]
23、符合PEP8原则的长字符串写法
string = ("this is a "
"really long long "
"string")
24、0打头的数字处理
>>> "%02d" % 1
'01'
>>> "%02d" % 100
'100'
>>> str(1).zfill(2)
'01'
>>> str(100).zfill(2)
'100'
>>> int('01')
1
25、清空列表
del l[:]
26、打乱列表
from random import shuffle
# works in place
l = range(10)
shuffle(l)
27、按某一字典值对列表排序
newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])
28、choice()\shuffle()\random()\sample()
choice(sequence)接收一个可迭代对象(包括字符串),随机选择其中一个返回
shuffle(sequence)接收一个可迭代对象,打乱
random()返回0到1之间的浮点数
sample(sequence,k)返回一个可迭代对象中随机的长度为k的片段,不会改变原对象
29、字典的合并,使用update()
>>> x = {'a':1, 'b': 2}
>>> y = {'b':10, 'c': 11}
>>> z = x.copy()
>>> z.update(y)
{'a': 1, 'c': 11, 'b': 10}
30、使用局部变量会比使用全局变量要快,python将局部变量存储在固定大小的队列中,因为你不可能在函数中动态的增加变量,python解释器(CPython)只需要按照位置来寻找变量就可以了(像列表那样),但是全局变量是存在于真正的字典中的,python通过键值来寻找变量
31、input和output
import sys
for line in sys.stdin:
print line
print >> sys.stderr, 'spam'
32、让主函数可以被别处调用的好方法
def main():
'''do something '''
if __name__ == '__main__':
main()
33、dict判断key存在
if key in dict:
'''do something'''
34、list去重
方法一:
t1 = [‘a’,’c’,’b’,’d’,’c’,’d’]
t2 = list(set(t1))
方法二:
t1 = [‘a’,’c’,’b’,’d’,’c’,’d’]
t2 = {}.fromkeys(t1).keys()
35、list两两分组
t = [1,2,3,4,5,6,7,8]
t = list(zip(t[0::2],t[1::2]))
36、dict按value去重
a = {"a":"11", "b":"11", "c":"22", "d":"22"}
func = lambda z:dict([(x, y) for y, x in z.items()])
print func(func(a))