0%

关于python

关于python的一些东西

  1. if 判断条件可以简写,比如:

    1
    2
    if x:
    print 'True'

    只要x是非零数值、非空字符串、非空list,非None值等,就判断为True,否则为False。参考
    以下都是False: [], (), {}, 0, None, 0.0, ‘’

  2. 字典的键
    必须是可hash的对象。所有不可变的对象都是可hash的。值相同的数字作为键的时候表示相同的键,比如1和1.0,就是一样的键。也有很少可变对象是可hash的:比如一个实现了特殊方法__hash__()的类。

  3. threading.join()
    如果不等这的话,主线程就一直往下运行了,是个阻塞函数,可以设置超时时间。只是控制主线程的时间,并不控制子线程的事件,子线程的结束时间要靠它自己去控制。

  4. 参数的包裹传递

    1
    2
    3
    4
    5
    6
    7
    # 包裹成元组传递
    def func(*name):
    print type(name)

    # 包裹成字典
    def func(**dict):
    print type(dict)

    参考

  5. 循环设计
    range(): 获取下标
    enumerate(): 同时获取下标和元素
    zip(): 从多个等长序列中分别取出一个元素,组成一个tuple
    参考同上

  6. 循环对象
    循环对象是包含有一个next()方法的对象,当循环到结束时,触发StopIteration错误。
    生成器的主要目的就是构成一个用户自定义的循环对象。
    生成器表达式: G = (x for x in range(4))
    表推导:L = [x**2 for x in range(10)]

  7. 异常处理
    计算机跟计算器的最大区别在于流程控制,for, while, if是循环控制,C里边的goto, longjump也是流程控制,信号,异常也是流程控制,信号异常区别于其他流程控制的地方在于是异步的,也就是不确定什么时候、哪里会出现跳转。

  8. 动态类型
    有一类特殊的对象,是用于存储数据结构的。常见的包括各种数字、字符串、表、字典。在C语言中,我们成这样一些数据结构为变量。而在python中,这些都是对象。
    对象是存储在内存中的实体。但我们并不能直接接触到该对象。我们在程序中写的对象名,只是指向这一对象的引用(reference)
    引用和对象分离,是动态类型的核心。
    列表可以通过引用其元素,改变对象自身(in-place change)。这种对象类型,称为可变数据对象(mutable object)。
    数字和字符串,不能改变对象本身,只能改变引用的指向,称为不可变数据对象(immutable object)。
    参考

  9. subprocess

    1
    2
    3
    4
    subprocess.call(): 父进程等待子进程完成。返回退出信息(returncode,相当于exit code)
    subprocess.check_call(): 父进程等待子进程完成。返回0。检查退出信息,如果returncode不为0,则举出subprocess.CalledProcessError,该对象包含有returncode属性,可用try...except...来检查。
    subprocess.check_out_put(): 父进程等待子进程完成。检查退出信息,如果return不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性和output属性。output属性为标准输出的输出结果,可用try...except...来检查
    out = subprocess.call("cd ..", shell=True) shell=True时,先运行一个shell,再用shell来解释整个字符串,为的使用一些shell内建命令。

    参考

  10. 闭包
    闭包就像是工厂类,但生成的不是类,而是一个个函数,闭包的参数是自由变量,区别函数的参数。创建闭包的函数执行完之后,就会从内存消失,这比类从文件加载开始就创建要减少资源占用。

  11. 接口设计
    python的一个duck typing,之前不理解。一个现实中的东西,它是圆的,红的,甜的,树上长的,会腐烂的,这些都是这个东西的一些属性行为, 那这个东西我们就可以叫做苹果,或者说我定义苹果就是符合这些条件的东西,只要一个东西符合这些条件,我就叫它苹果。放到程序里边,如果我定义一个类是符合某些条件的,有某些属性方法,那符合这个条件的所有类都可以说是这个东西。接口就是把这些属性行为集合到一起,然后让多个子类去实现这些方法,那我就可以说实现了这些属性行为的子类都是这个东西了。
    使用接口的核心目的之一就是文档化

  12. 新建一个带元素的set

    1
    2
    a = set([1,2,3])
    a = {1,2,3} // 还有这种方式
  13. 简单的性能测试

    1
    2
    3
    # gprof2dot.py这个文件去网上搜下吧
    python -m cProfile -o result.out meepo.py
    python gprof2dot.py -f pstats result.out | dot -Tpng -o result.png