zip
In [1]: a = ['a','b']
In [2]: b = [18,19]
In [3]: dict(zip(a,b))
Out[3]: {'a': 18, 'b': 19}
字典按照键或值排序
In [1]: dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
In [2]: sorted(dic.iteritems(),key=lambda d:d[1],reverse=True)
Out[2]: [('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)]
检索是否存在.pyc文件
# coding=utf-8
import os
res = []
for root, directory, files in os.walk('./'):
print root
for filename in files:
name, suf = os.path.splitext(filename)
if suf == '.pyc':
res.append(os.path.join(root, filename))
print res
list 去重
In [1]: a = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
In [2]: list(set(a))
Out[2]: [1, 2, 3, 4, 5]
In [3]: new_ids = []
In [4]: for i in a:
...: if i not in new_ids:
...: new_ids.append(i)
...:
In [5]: print new_ids
[1, 2, 3, 4, 5]
In [2]: ids = [1,4,3,3,4,2,3,4,5,6,1]
In [3]: func = lambda x,y:x if y in x else x + [y]
In [4]: reduce(func,[[],] + ids)
Out[4]: [1, 4, 3, 2, 5, 6]
[1,2,3,4.....,100] 转化为[[1,2,3],[4,5,6],[7,8,9]....]
In [1]: res = []
In [2]: for i in range(1,100,3):
...: res.append([i,i+1,i+2])
...:
In [3]: print res
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24], [25, 26, 27], [28, 29, 30], [31, 32, 33], [34, 35, 36], [37, 38, 39], [40, 41, 42], [43, 44, 45], [46, 47, 48], [49, 50, 51], [52, 53, 54], [55, 56, 57], [58, 59, 60], [61, 62, 63], [64, 65, 66], [67, 68, 69], [70, 71, 72], [73, 74, 75], [76, 77, 78], [79, 80, 81], [82, 83, 84], [85, 86, 87], [88, 89, 90], [91, 92, 93], [94, 95, 96], [97, 98, 99]]
时间消耗装饰器
# coding=utf-8
def timeCon(func):
import time
def wrapper(*args, **kw):
t = time.clock()
func(*args, **kw)
print '%.9f' % (time.clock() - t)
return wrapper
@timeCon
def foo():
print 'hello world'
foo()
调用父类方法
python3
super().__init__(name)
python2
super(Bosi,self).__init__(name)
Cat.__init__(self,name)
Python自省
自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance().
Python重载
引自知乎:http://www.zhihu.com/question/20053359
函数重载主要是为了解决两个问题。
- 可变参数类型。
- 可变参数个数。
另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。
好吧,那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。
那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。
好了,鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。
Python私有化
- xx: 公有变量
- _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
- __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
- _xx_:双前后下划线,用户名字空间的魔法对象或属性。例如:_init_ , __ 不要自己发明这样的名字
- xx_:单后置下划线,用于避免与Python关键词的冲突