转载:Python 绝对简明手册 Py2.5 绝对简明手册
1. Py2.5 绝对简明手册 1.1. 语法 1.1.1. if Toggle line numbers x=int(raw_input("Please enter an integer:")) 1.1.2. for Toggle line numbers a=['cat','door','example'] #如果要修改a的内容,则用a的副本循环,如: for x in a[:] : Toggle line numbers >>>range(10,0,-3) break,continue 用法和C++中类似 1.1.3. pass while True: Toggle line numbers def fib(n=1000):#参数可以有默认值,多个可选参数赋值可以直接写"参数变量名=值"来快速赋值 #函数可以重命名,如 Toggle line numbers f=fib 1.1.4. in
1.1.5. 参数格式 **para #参数格式为 **para 表示接受一个字典,为 *para 表示接受一个元组 Toggle line numbers def test(para1,*args,**dic): 1.1.6. Lambda函数
1.1.7. List的函数 append(x) 追加到链尾 filter(function函数 , sequence序列) 返回sequence中使filer为true的 map(function,sequence,[sequence...]) 返回新的sequence,序列中值为对每个元素分别调用function. reduce(function,sequence,[init]) 返回一个单值为,计算步骤为 :
function(init,sequence[0]) sequence只有一个元素时,返回该元素,为空时抛出异常. 1.1.8. 列表推导式 freshfruit=[' banana ',' loganberry '] 1.1.9. del Toggle line numbers a=[1,2,3,4,5,6] 抛出异常 1.1.10. 元组 t=1234,5567,'hello' 1.1.11. set set(集合):无序不重复的元素集 Toggle line numbers basket = ['apple','orange','apple','pear','apple','banana'] === dict === 字典:关键字为不可变类型,如字符串,整数,只包含不可变对象的元组.列表等不可以作为关键字.如果列表中存在关键字对,可以用dict()直接构造字典.而这样的列表对通常是由列表推导式生成的. Toggle line numbers tel={'jack':4098,'sape':4139} 输出: Toggle line numbers gallahad the pure enumerate()返回索引位置和对应的值 Toggle line numbers for i,v in enumerate(['tic','tac','toe']) 输出: 0 tic 1 tac 2 toe 1.1.12. zip zip用于多个sequence的循环 Toggle line numbers questions=['name','quest','favorite color'] 输出: What is your name ? It is lancelot. 1.1.13. reversed反向循环 Toggle line numbers for i in reversed(range(1,4)): 输出: 3 1.1.14. sorted排序 1.1.15. sequence比大小 list<string<tuple(因为字母表中l在s前...) 同类比大小按照字典序 1.1.16. 导入模块 模块的查找路径 1.当前的目录 2.环境变量PYTHONPATH所指的目录列表 3.python解释器的安装目录 如将代码保存上述的一个目录中的的fibo.py文件中,便可以 Toggle line numbers import fibo 如果想直接使用fibo.function可以重命名这个函数,如 Toggle line numbers f=fibo.function 也可以 Toggle line numbers form fibo import function 甚至可以form fibo import * 可以 form 包.子包.模块 imort 函数 然后就直接使用该函数,不需要加前缀 1.1.17. 包 引用推荐写法为 form 包 import 模块 几个功能类似的模块可以组合成一个包, 比如一个可以处理.wav,.mp3,.wma等音频文件的有类似如下结构: Sound/ 只有当init.py存在时python才将该文件夹视为一个包,该文件可以为空文件 一般在init.py文件中定义一个all列表,包含要import *时要导入的模块. 如Sound/Effects/init.py可以有如下内容 __all__=["echo","surround","reverse"] 包的作者在发布包时可以更新这个列表,也可以根据需要让某个模块不支持import * 对于包中同一个文件夹下的模块可以把 form 包.子包 imort 模块 简写为 imort 模块 1.1.18. 格式化输出 for x in xrange(1,11): 1.1.19. 等效代码 for x in xrange(1,11): 对于字典可以用变量名来直接格式化,如: >>>table={'Sjoerd':4127,'Jack':4098,'Dcab':8637678} 同时,函数vars()返回包含所有变量的字典,配合使用,无坚不摧! 1.1.20. 读写文件: f=open('/tmp/hello','w') #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 如:'rb','wb','r+b'等等 f.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串) file.readline() 返回一行 file.readline([size]) 返回包含size行的列表,size 未指定则返回全部行 for line in f: #交换通道
f.write("hello/n") #如果要写入字符串以外的数据,先将他转换为字符串. f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数). f.seek(偏移量,[起始位置]) 用来移动文件指针 偏移量:单位:比特,可正可负 起始位置:0-文件头,默认值;1-当前位置;2-文件尾 f.close() 关闭文件 1.1.21. pickle pickle 序列化/保存对象/封装 pickle.dump(x,f) #把文件对象f保存到x变量中 x=pickle.load(f) #还原这个对象 try:
except 异常类型: #如果有多个异常类型,可以将他们放在括号()中 #如except(RuntimeError,TypeError,NameError):
最后一个异常名可以省略异常类型,作为通配项将所有异常pass.慎用!!! 在except后可以包含一个else raise可以抛出异常,同时可以附带异常参数 try:
except Exception,inst:
如果抛出异常没有指定参数,则捕获异常时的参数包含的是该异常的默认信息 >>>try:
Handling run-time error:integer division or modulo by zero 自定义异常:惯例是以Error结尾的类,同类的异常一般派生自同一个基类,基类异常可以匹配派生类异常 class MyError(Exception):
try:
except MyError,e:
>>> My exeception occurred,value 4 finally:和C++中类似,即使是break,continue或return后一样会执行。一般用于释放资源,如文件,网络连接。 def divide(x,y):
with #with可以帮助你自动释放资源,下一个版本可用 with open('myfile.txt') as f:
#该文件会自动被释放 1.1.22. 初识类 class ClassName:
#创建类实例 x=ClassName() #给类的方法重命名 xf=ClassName.f 1.1.22.1. 类继承 class DerivedClassName(BassClassName):
如果基类定义在另一个模块中, 要写成 modname.BaseClassName 派生类的函数会覆盖基类的同名函数,如果想扩充而不是改写基类的函数,可以这样调用基类函数 BaseClassName.methodname(self,arguments) 注意:该基类要在当前全局域或被导入 1.1.22.2. 多重继承 类多继承//小心使用 class DerivedClassName(Base1,Base2,Base3): ................. 对于一个函数的解析规则是深度优先,先是Base1,然后是Base1的基类,诸如此类. 1.1.23. Iterators 迭代器 for element in [1,2,3]:
for key in {'one':1,'two':2}:
for line in open("my.txt"):
在容器中定义next()逐一返回元素,并在迭代完成时抛出StopIteration异常,然后定义iter()返回self,便可以for...in循环 用Generators(生成器)可以快速生成一个序列,在调用next()时依次返回序列中的值. def reverse(data):
#yield会自动创建next()和iter(),每次调用next()时yield会进行下一步循环,并在yield处返回值 1.1.24. 生成器表达式 生成器表达式:类似于没有中括号的列表推导式,可用在参数中 >>>sum(i*i for i in range(10)) 285 >>>xvec=[10,20,30] >>>yvec=[7,5,3] >>>sum(x*y for x,y in zip(xvec,yvec))
>>>from math import pi,sin >>>sine_table=dict((x,sin(x*pi/180) for x in range(1,91)) >>>unique_words=set(word for line in page for word in line.split()) >>>data='golf' >>>list(data[i] for i in range(len (data)-1,-1,-1)) ['f','l','o','g'] |