Python常用小知识点

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关键词的冲突

你可能感兴趣的:(Python常用小知识点)