关于python的一些东西
if 判断条件可以简写,比如:
1
2if x:
print 'True'只要x是非零数值、非空字符串、非空list,非None值等,就判断为True,否则为False。参考
以下都是False: [], (), {}, 0, None, 0.0, ‘’字典的键
必须是可hash的对象。所有不可变的对象都是可hash的。值相同的数字作为键的时候表示相同的键,比如1和1.0,就是一样的键。也有很少可变对象是可hash的:比如一个实现了特殊方法__hash__()的类。threading.join()
如果不等这的话,主线程就一直往下运行了,是个阻塞函数,可以设置超时时间。只是控制主线程的时间,并不控制子线程的事件,子线程的结束时间要靠它自己去控制。参数的包裹传递
1
2
3
4
5
6
7# 包裹成元组传递
def func(*name):
print type(name)
# 包裹成字典
def func(**dict):
print type(dict)循环设计
range(): 获取下标
enumerate(): 同时获取下标和元素
zip(): 从多个等长序列中分别取出一个元素,组成一个tuple
参考同上循环对象
循环对象是包含有一个next()方法的对象,当循环到结束时,触发StopIteration错误。
生成器的主要目的就是构成一个用户自定义的循环对象。
生成器表达式: G = (x for x in range(4))
表推导:L = [x**2 for x in range(10)]异常处理
计算机跟计算器的最大区别在于流程控制,for, while, if是循环控制,C里边的goto, longjump也是流程控制,信号,异常也是流程控制,信号异常区别于其他流程控制的地方在于是异步的,也就是不确定什么时候、哪里会出现跳转。动态类型
有一类特殊的对象,是用于存储数据结构的。常见的包括各种数字、字符串、表、字典。在C语言中,我们成这样一些数据结构为变量。而在python中,这些都是对象。
对象是存储在内存中的实体。但我们并不能直接接触到该对象。我们在程序中写的对象名,只是指向这一对象的引用(reference)
引用和对象分离,是动态类型的核心。
列表可以通过引用其元素,改变对象自身(in-place change)。这种对象类型,称为可变数据对象(mutable object)。
数字和字符串,不能改变对象本身,只能改变引用的指向,称为不可变数据对象(immutable object)。
参考subprocess
1
2
3
4subprocess.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内建命令。闭包
闭包就像是工厂类,但生成的不是类,而是一个个函数,闭包的参数是自由变量,区别函数的参数。创建闭包的函数执行完之后,就会从内存消失,这比类从文件加载开始就创建要减少资源占用。接口设计
python的一个duck typing,之前不理解。一个现实中的东西,它是圆的,红的,甜的,树上长的,会腐烂的,这些都是这个东西的一些属性、行为, 那这个东西我们就可以叫做苹果,或者说我定义苹果就是符合这些条件的东西,只要一个东西符合这些条件,我就叫它苹果。放到程序里边,如果我定义一个类是符合某些条件的,有某些属性、方法,那符合这个条件的所有类都可以说是这个东西。接口就是把这些属性、行为集合到一起,然后让多个子类去实现这些方法,那我就可以说实现了这些属性、行为的子类都是这个东西了。
使用接口的核心目的之一就是文档化新建一个带元素的set
1
2a = set([1,2,3])
a = {1,2,3} // 还有这种方式简单的性能测试
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