simple guide for python.docx
《simple guide for python.docx》由会员分享,可在线阅读,更多相关《simple guide for python.docx(17页珍藏版)》请在冰豆网上搜索。
simpleguideforpython
Python绝对简明手册
1.1.语法
1.1.1.if
x=int(raw_input("Pleaseenteraninteger:
"))
ifx print'NegativeNumber'
elifx==0:
print'Zero'
else:
print'PositiveNumber'
1.1.2.for
a=['cat','door','example']
forxina:
printx
#如果要修改a的内容,则用a的副本循环,如:
forxina[:
]:
.....................
>>>range(10,0,-3)
[10,7,4,1]
a=['cat','door','example']
foriinrange(len(a)):
printi,a[i]
break,continue用法和C++中类似
1.1.3.pass
whileTrue:
pass#忽略,什么也不做
deffib(n=1000):
#参数可以有默认值,多个可选参数赋值可以直接写"参数变量名=值"来快速赋值
"""这里给函数写文档注释"""
a,b=0,1
whileb printb
a,b=b,a+b
#函数可以重命名,如
f=fib
f(223)
1.1.4.in
[list]
if'yes'in ('y','ye','yes'):
print 'ok'
[/list]
1.1.5.参数格式**para
#参数格式为**para表示接受一个字典,为*para表示接受一个元组
deftest(para1,*args,**dic):
printpara1
forarginargs:
printarg
keys=dic.keys()
keys.sort()
forkeyinkeys:
printkey,':
',dic[key]
1.1.6.Lambda函数
[list]
defmake_incrementor(n):
returnlambdax:
x+n
f=make_incrementor(n)
>>>f(0)
42
>>>f
(1)
43
[/list]
1.1.7.List的函数
append(x) 追加到链尾
extend(L) 追加一个列表
insert(i,x) 在位置i插入x
remove(x) 删除第一个值为x的元素,如果不存在会抛出异常
pop([i]) 返回并删除位置为i的元素,i未给定时默认作用在最后一个元素.[i]表示i为可选的
index(x) 返回第一个值为x的元素,不存在则抛出异常
count(x) 返回x出现的次数
sort() 排序
reverse() 翻转,反转
filter(function函数,sequence序列) 返回sequence中使filer为true的
map(function,sequence,[sequence...]) 返回新的sequence,序列中值为对每个元素分别调用function.
reduce(function,sequence,[init]) 返回一个单值为,计算步骤为:
[list]
[*]第1个结果=function(sequence[0],sequence[1])
[*]第2个结果=function(第1个结果,sequence[2])
[*]返回最后一个计算得值
[*]如果有init,则先调用[/list]
function(init,sequence[0]) sequence只有一个元素时,返回该元素,为空时抛出异常.
1.1.8.列表推导式
freshfruit=[' banana ',' loganberry ']
>>>[weapon.strip()forweaponinfreshfruit]
['banana','loganberry']
vec=[2,4,6]
>>>[3*xforxinvecifx>3]
[12,18]
>>>[(x,x**2)forxinvec] #一个元素一定要是一个sequence,而
[x,x**2forxinvec]是错误的
[(2,4),(4,16),(6,36)]
vec2=[4,3,-9]
[x*yforxinvecforyinvec2]
[vec[i]+vec2[i]foriinrange(len(vec))]
[str(round(355/113.0,i))foriinrange(1,6)]#str()是转换类型为可以打印的字符
1.1.9.del
a=[1,2,3,4,5,6]
dela[0]
>>>a
[2,3,4,5,6]
dela[2:
4]
>>>a
[2,3,6]
dela[:
]
>>>a
[]
dela
>>>a
抛出异常
1.1.10.元组
t=1234,5567,'hello'
x,y,z=t #拆分操作可以应用于所有sequence
>>>x
1234
u=t,(1,2,3)
>>>u
((1234,5567,'hello'),(1,2,3))
empty=()#空元组
singleton='hi',#单个元素的元组
1.1.11.set
set(集合):
无序不重复的元素集
basket=['apple','orange','apple','pear','apple','banana']
fruit=set(basket)
>>>fruit
set(['orange','pear','apple','banana'])
>>>'orange'infruit
True
a=set('abracadabew')
>>>a
set(['a','c','b','e','d','r','w'])
b=set('wajgwaoihwb')
>>>b
set(['a','b','g','i','h','j','o','w'])
>>>a-b #差
set(['c','r','e','d'])
>>>a|b #并
set(['a','c','b','e','d','g','i','h','j','o','r','w'])
>>>a&b #交
set(['a','b','w'])
>>>a^b #(并-交)
set(['c','e','d','g','i','h','j','o','r'])
1.1.12.dict
字典:
关键字为不可变类型,如字符串,整数,只包含不可变对象的元组.列表等不可以作为关键字.如果列表中存在关键字对,可以用dict()直接构造字典.而这样的列表对通常是由列表推导式生成的.
tel={'jack':
4098,'sape':
4139}
tel['guido']=4127
>>>tel
{'sape':
4139,'jack':
4098,'guido':
4127}
>>>tel['jack']
4098
deltel['sape']
>>>tel.keys()
['jack','guido']
>>>tel.has_key('jack')
True
knight={'gallahad':
'thepure','robin':
'thebrave'}
fork,vinknight.iteritems():
printk,v
输出:
gallahadthepure
robinthebrave
enumerate()返回索引位置和对应的值
fori,vinenumerate(['tic','tac','toe'])
printi,v
输出:
0tic
1tac
2toe
1.1.13.None
表示该值不存在
1.1.14.zip
zip用于多个sequence的循环
questions=['name','quest','favoritecolor']
answers=['lancelot','theholygrail','blue']
forq,ainzip(questions,answers):
print'Whatisyour%s?
Itis%s.'%(q,a)
输出:
Whatisyourname?
Itislancelot.
Whatisyourquest?
Itistheholygrail.
Whatisyourfavoritecolor?
Itisblue.
1.1.15.reversed反向循环
foriinreversed(range(1,4)):
printi
输出:
3
2
1
1.1.16.sorted排序
1.1.17.sequence比大小
list
同类比大小按照字典序
1.1.18.导入模块
模块的查找路径
1.当前的目录
2.环境变量PYTHONPATH所指的目录列表
3.python解释器的安装目录
如将代码保存上述的一个目录中的的fibo.py文件中,便可以
importfibo
fibo.function().............
如果想直接使用fibo.function可以重命名这个函数,如
f=fibo.function
f()
也可以
formfiboimportfunction
function()
甚至可以formfiboimport*
可以form包.子包.模块imort函数
然后就直接使用该函数,不需要加前缀
1.1.19.包
引用推荐写法为
form包import模块
几个功能类似的模块可以组合成一个包,
比如一个可以处理.wav,.mp3,.wma等音频文件的有类似如下结构:
Sound/
__init__.py
Formats/
__init__.py
wavread.py
wavwrite.py
mp3read.py
mp3write.py
wmaread.py
wmawrite.py
Effects/
__init__.py
echo.py
surround.py
reverse.py
只有当init.py存在时python才将该文件夹视为一个包,该文件可以为空文件一般在init.py文件中定义一个all列表,包含要import*时要导入的模块.如Sound/Effects/init.py可以有如下内容
__all__=["echo","surround","reverse"]
包的作者在发布包时可以更新这个列表,也可以根据需要让某个模块不支持import*
对于包中同一个文件夹下的模块可以把
form包.子包imort模块
简写为imort模块
1.1.20.格式化输出
forxinxrange(1,11):
printrepr(x).rjust
(2),repr(x*x).rjust(3)
#repr是将变量类型转换为可以被编译器处理的文字格式
#rjust是调整宽度为参数个字符,r表示右对齐;ljust为左对齐,ljust(n)[:
n]可
以截断输出;center为居中
#zfill()可以向数值表达式的左侧填充0
1.1.21.等效代码
forxinxrange(1,11):
print'%2d%3d'%(x,x*x)
#%10s表示用str转化为字符串
#小数输出如 %5.3f
对于字典可以用变量名来直接格式化,如:
>>>table={'Sjoerd':
4127,'Jack':
4098,'Dcab':
8637678}
>>>print'Jack:
%(Jack)d;Sjoerd:
%(Sjoerd)d;Dcab:
%(Dcab)d'%
table
Jack:
4098;Sjoerd:
4127;Dcab:
8637678
同时,函数vars()返回包含所有变量的字典,配合使用,无坚不摧!
1.1.22.读写文件:
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未指定则返回全部行
forlineinf:
#交换通道
[list]
printline[/list]
f.write("hello\n")#如果要写入字符串以外的数据,先将他转换为字符串.
f.tell()返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).
f.seek(偏移量,[起始位置])
用来移动文件指针
偏移量:
单位:
比特,可正可负
起始位置:
0-文件头,默认值;1-当前位置;2-文件尾
f.close()关闭文件
1.1.23.pickle
pickle序列化/保存对象/封装
pickle.dump(x,f)#把文件对象f保存到x变量中
x=pickle.load(f)#还原这个对象
try:
[list]
.............[/list]
except异常类型:
#如果有多个异常类型,可以将他们放在括号()中
#如except(
[url=
[url=
[url=
):
[list]
..............[/list]
最后一个异常名可以省略异常类型,作为通配项将所有异常pass.慎用!
!
!
在except后可以包含一个else
raise可以抛出异常,同时可以附带异常参数
try:
[list]
rasieException('message1','message2')#只有一个参数时也可以这样写rasieException,'message1'[/list]
exceptException,inst:
[list]
#inst是该异常类的一个实例printinst.args#打印出参数名
printinst#直接打印str属性x,y=instprint'x=',xprint'y=',y
[/list]
如果抛出异常没有指定参数,则捕获异常时的参数包含的是该异常的默认信息
>>>try:
[list]
1/0
except
[url=
detail:
[list]
print'Handlingrun-timeerror:
',detail[/list][/list]
Handlingrun-timeerror:
integerdivisionormodulobyzero
自定义异常:
惯例是以Error结尾的类,同类的异常一般派生自同一个基类,基类异常可以匹配派生类异常
class
[url=
(Exception):
[list]
definit(self,value):
[list]
self.value=value[/list]
defstr(self):
[list]
returnreper(self.value)[/list][/list]
try:
[list]
raise
[url=
(2,2)
[/list]
except
[url=
e:
[list]
print'Myexeceptionoccurred,value',e.value[/list]
>>>
Myexeceptionoccurred,value4
finally:
和C++中类似,即使是break,continue或return后一样会执行。
一般用于释放资源,如文件,网络连接。
defdivide(x,y):
[list]
try:
[list]
try:
[list]
result=x/y[/list]
except
[url=
:
[list]
print"zero"[/list]else:
[list]
print'result=',result[/list][/list]finally:
[list]
print'finish'[/list][/list]
with#with可以帮助你自动释放资源,下一个版本可用
withopen('myfile.txt')asf:
[list]
forlineinf:
[list]
printline[/list][/list]
#该文件会自动被释放
1.1.24.初识类
class
[url=
:
[list]
"类文档,可以通过类名.doc访问"#类的私有变量是至少以双下划线开头,最多以单下划线结尾的类变量,调用时会变量名会被混淆成_
[url=
变量名i=12345deff(self)
[list]
return"helloworld"[/list]
definit(self):
[list]
"构造函数,可以初始化变量,可以有参数"#可以通过self调用当前类的函数和数据self.data=[][/list][/list]
#创建类实例
x=
[url=
()
#给类的方法重命名
xf=
[url=
.f
1.1.24.1.类继承
class
[url=
(
[url=
):
[list]
...................................[/list]
如果基类定义在另一个模块中,要写成
modname.
[url=
派生类的函数会覆盖基类的同名函数,如果想扩充而不是改写基类的函数,可以这样调用基类函数
[url=
.methodname(self,arguments)
注意:
该基类要在当前全局域或被导入
1.1.24.2.多重继承
类多继承//小心使用
class
[url=
(Base1,Base2,Base3):
...............