Python_绝对简明手册.docx_第1页
Python_绝对简明手册.docx_第2页
Python_绝对简明手册.docx_第3页
Python_绝对简明手册.docx_第4页
Python_绝对简明手册.docx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

python 绝对简明手册1. 阅读须知文中使用作为会命令行中的输出信息的前缀对于不清楚用用途的函数可以在解释器下面输入help(函数名)来获取相关信息另外,自带的文档和google也是不可少的2. 基本语法2.1. if / elif / elsex=int(raw_input(please enter an integer:)#获取行输入if x0: print 正数elif x=0: print 零else: print 负数此外c语言中类似xxx?xxx:xxx在python中可以这样写number=8print good if 8=number else bad #当满足if条件时返回good,否则返回badgood2.2. inin判断 一个数 是否在 一个集合(如:元组,列表等) 中if yes in (y,ye,yes):print ok2.3. for . inpython中没有类似c中的for循环,而是使用for.in来对集合中的每一个元素进行操作a=cat,door,examplefor x in a: print x如果要修改a的内容,请用a的副本循环(否则不安全),如:a=cat,for x in a: if len(x)6:a.insert(0,x), cat, 若需要得到循环的次数,参见 函数 range 的用法2.4. break / continue这两个的用法和c中相同for i in range(10): if 2=i:continue #结束当前循环,进入下一步循环 if 6=i:break #跳出循环 print i输出013452.5. while / passwhile true: pass #什么也不做2.6. is用来比较两个变量是否指向同一内存地址(也就是两个变量是否等价)而 = 是用来比较两个变量是否逻辑相等a=1,2b=1,2 a is bfalse a = btrue2.7. del用于删除元素a=1,2,3,4,5,6del a0a2,3,4,5,6del a2:4a2,3,6del a:adel aa#抛出异常nameerror: name a is not defined2.8. try . except . finally / raisetry . except用于异常处理try: x=int(raw_input(请输入数字:)except valueerror: #可以同时捕获多个异常,写法如except(runtimeerror,valueerror): #当输入非数字时 print您输入不是数字except: #省略异常名,可以匹配所有异常,慎用 passelse:#当没有异常时 print result=,resultfinally:#和java中类似。一般用于释放资源,如文件,网络连接。 print finishraise用于抛出异常,可以为自定义的异常类惯例是以error结尾的类,同类的异常一般派生自同一个基类(如exception)class myerror(exception): def _init_(self,value): self.value=value def _str_(self): return reper(self.value)基类异常可以匹配派生类异常try: raise exception(spam,egg)except exception,inst:#inst为该异常类的实例,为可选项 print type(inst) #异常的类型 print inst3. 内建类型3.1. nonenone 表示该值不存在,比如 没有定义返回值 的函数就 返回none3.2. ture / false布尔类型,ture等价于1,false等价于03.3. listtest=1,2,yes3.3.1. 内建函数append(x) 追加到链尾extend(l) 追加一个列表,等价于+=insert(i,x) 在位置i插入xremove(x) 删除第一个值为x的元素,如果不存在会抛出异常reverse() 反转序列pop(i) 返回并删除位置为i的元素,i默认为最后一个元素(i两边的表示i为可选的,实际不用输入)index(x) 返回第一个值为x的元素,不存在则抛出异常count(x) 返回x出现的次数sort() 排序例子:test=1,2,yestest.append(1) #追加到链尾test1, 2, yes, 1test.extend( no,maybe) #追加一个列表test1, 2, yes, 1, no, maybe test.insert(0,never) #在位置0插入never testnever, 1, 2, yes, 1, no, maybe test.remove(no) #删除第一个值为no的元素,如果不存在会抛出异常 testnever, 1, 2, yes, 1, maybe test.reverse() #反转序列 testmaybe, 1, yes, 2, 1, never test.pop() #返回并删除位置为i的元素,i默认为最后一个元素never testmaybe, 1, yes, 2, 1 test.index(yes) #返回第一个值为yes的元素,不存在则抛出异常2 test.count(1) #返回1出现的次数2test.sort() #排序 test1, 1, 2, maybe, yes3.3.2. 切片从序列中抽取一部分 test=never, 1, 2, yes, 1, no, maybe test0:3 #包括test0,不包括test3never, 1, 2 test0:6:2 #包括test0,不包括test6,而且步长为2never, 2, 1 test:-1 #包括开始,不包括最后一个never, 1, 2, yes, 1, no test-3: #抽取最后3个1, no, maybetest:-1 #倒序排列maybe, no, 1, yes, 2, 1, never3.3.3. 列表推导式可以直接通过for循环生成一个listfreshfruit= banana , loganberry weapon.strip() for weapon in freshfruitbanana, loganberry说明:strip()是去除字符串两端多于空格,该句是去除序列中的所有字串两端多余的空格vec=2,4,63*x for x in vec if x312, 18(x,x*2) for x in vec#循环变量要是一个sequence,而x,x*2 for x in vec是错误的(2,4),(4,16),(6,36)vec2=4,3,-9x*y for x in vec for y in vec28, 6, -18, 16, 12, -36, 24, 18, -54veci+vec2i for i in range(len(vec)6, 7, -3str(round(355/113.0,i) for i in range(1,6)#str()是转换类型为可以打印的字符#round(x,n)表示对x保留n位小数(四舍五入)3.1, 3.14, 3.142, 3.1416, 3.141593.4. 元组一旦初始化便不能更改的数据结构,速度比list快t=1234,5567,hello #t=(1234,5567,hello)的简写x,y,z=t #拆分操作可以应用于所有sequencex1234u=t,(1,2,3)u(1234,5567,hello),(1,2,3)empty=() #空元组singleton=hi, #单个元素的元组,注意逗号通过元组可以很简单的进行数据交换.比如:a=1b=2a,b=b,a3.5. setset(集合):无序不重复的元素集basket = apple,orange,apple,pear,apple,bananafruit=set(basket)fruitset(orange, pear, apple, banana)orange in fruittruea=set(abracadabew)aset(a, c, b, e, d, r, w)b=set(wajgwaoihwb)bset(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)ab #(并-交)set(c, e, d, g, i, h, j, o, r)3.6. dict字典:关键字为不可变类型,如字符串,整数,只包含不可变对象的元组.列表等不可以作为关键字.如果列表中存在关键字对,可以用dict()直接构造字典.而这样的列表对通常是由列表推导式生成的.tel=jack:4098,sape:4139telguido=4127telsape: 4139, jack: 4098, guido: 4127teljack #如果jack不存在,会抛出keyerror4098a.get(zsp,5000) #如果zsp为tel的键则返回其值,否则返回5000del telsape #删除键sape和其对应的值tel.keys() #复制一份键的副本,同理tel.items()为值的副本jack, guidojack in tel #判断jack是否tel的键truezsp not in teltruefor k,v in tel.iteritems():print k,v #同理tel.iterkeys()为键的迭代器,tel.itervalues()为值的迭代器jack 4098guido 4127tel.copy() #复制一份teljack: 4098, guido: 4127 tel.fromkeys(1,2,0) #从序列生成并返回一个字典,其值为第二个参数(默认为none),不改变当前字典1: 0, 2: 0tel.popitem() #弹出一项(jack, 4098)4. 函数相关4.1. 函数定义 / 参数默认值def fib(n=2,a=1):#参数可以有默认值 这里给函数写文档注释 for i in range(n): print af=fib #可以用一个变量表示函数f(3)111fib(a=2) #多个可选参数赋值可以直接写参数变量名值来快速赋值224.2. lambda函数一种无名函数的速写法def make_incrementor(n): return lambda x: x+nf=make_incrementor(n)#f等价于#def f(x):# return x+n4.3. 不定长参数 *para,*para参数格式为 *para 表示接受一个元组为 *para 表示接受一个字典*para要在*para之前def test(*args,*dic): for arg in args : print arg for k,v in dic.iteritems(): print k ,:,v test(yes,1,2,me=张沈鹏,where=中国) #yes,1,2传递给元组;me=张沈鹏,where=中国传递给字典yes12me : 张沈鹏where : 中国4.4. 装饰器adef b:pass等价于def b:passb=a(b)即将函数b作为参数传给参数afrom time import time#测试运行时间def cost_time(func): def result(*args,*dic): beign=time() func(*args,*dic) print cost time : ,time()-beign return resultcost_timedef show(n): for x in range(n):print x show(10)0123456789cost time : 0.04699993133544.5. 生成器表达式生成器表达式:类似于没有中括号的列表推导式,可用在参数中sum(i*i for i in range(10)285unique_words=set(word for line in page for word in line.split()#page为打开的文件data=golflist(datai for i in range(len (data)-1,-1,-1)f,l,o,g4.6. yield每次调用返回一个值,并记录当前执行位置所有的变量def reverse(data): for index in range(len(data)-1,-1,-1): yield dataindexfor char in reverse(golf): print char,输出f l o g5. 常用函数5.1. eval对字符串参数运算,求值 eval(1 + 2*3) #可以方便的用来做四则运算7 a=1 eval(a+1) #可以访问变量25.2. exec将字符串参数作为python脚本执行 exec(a=zsp) azsp5.3. execfile和exec类似,不过是用来打开一个文件,并作为python脚本执行5.4. dir显示对象的所有属性(即可以用.操作直接访问) dir()_add_, _class_, _contains_, _delattr_, _delitem_, _delslice_, _doc_, _eq_, _ge_, _getattribute_, _getitem_, _getslice_, _gt_, _hash_, _iadd_, _imul_, _init_, _iter_, _le_, _len_, _lt_, _mul_, _ne_, _new_, _reduce_, _reduce_ex_, _repr_, _reversed_, _rmul_, _setattr_, _setitem_, _setslice_, _str_, append, count, extend, index, insert, pop, remove, reverse, sort5.5. helphelp(类/函数) 返回相应对象的文档字符串 help(vars)help on built-in function vars in module _builtin_:vars(.) vars(object) - dictionary without arguments, equivalent to locals(). with an argument, equivalent to object._dict_.5.6. len返回序列/字典的长度 len(1,2,3)35.7. print输出字符串用法演示:print today , #加逗号,输出后不换行name=zspprint name,cost $,10 #输出多个变量print hello,%s!%name #%s 表示用str转化为字符串for x in xrange(1,11): print %2d %3d % (x,x*x) #小数输出如 %5.3f对于字典可以用变量名来直接格式化,如:table=sjoerd:4127,jack:4098,dcab:8637678print jack:%(jack)d; sjoerd:%(sjoerd)d; dcab:%(dcab)d %tablejack:4098; sjoerd:4127; dcab:8637678同时,函数vars()返回包含所有变量的字典,配合使用,无坚不摧!5.8. raw_inputx=raw_input(please enter an sentence:) #将输入的内容赋值给x5.9. rangerange(10,0,-3)#参数的含义为起点(默认为0),终点(不含终点),步长(默认为1)10,7,4,1和for.in配合使用a=cat,door,examplefor i in range(len(a):#len()函数为求序列的长度 print i,ai5.10. filterfilter(function , sequence)返回序列,为原序列中能使function返回true的值a=1,2,3,4filter(lambda x:x%2,a)1, 35.11. mapmap(function,sequence,sequence.)返回序列,为对原序列每个元素分别调用function获得的值.可以传入多个序列,但function也要有相应多的参数,如map(lambda x,y,z:x+y+z,range(1,3),range(3,5),range(5,7)计算过程为1+3+5=92+4+6=12返回9,125.12. reducereduce(function,sequence,init)返回一个单值为,计算步骤为 : 第1个结果=function(sequence0,sequence1) 第2个结果=function(第1个结果,sequence2) 返回最后一个计算得值 如果有init,则先调用function(init,sequence0) sequence只有一个元素时,返回该元素,为空时抛出异常.如reduce(lambdax,y:x+y,range(3),99)的计算为99+0=99 = 99+1=100 = 100+2=102返回102注:实际使用中用内建函数sum来完成这个累加更合适,如这里等价sum(range(3),99)5.13. zipzip用于多个sequence的循环questions=name,quest,favorite coloranswers=lancelot,the holy grail,bluefor q,a in zip(questions,answers): print what is your %s ? it is %s.%(q,a)输出:what is your name ? it is lancelot.what is your quest ? it is the holy grail.what is your favorite color ? it is blue.5.14. reversed反向循环for i in reversed(range(1,4): print i输出:3215.15. sorted排序返回一个有序的新序列sorted(2,5,1,4)1, 2, 4, 55.16. enumerate 返回索引位置和对应的值for i,v in enumerate(tic,tac,toe) print i,v输出:0 tic1 tac2 toe5.17. open/文件操作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: print line #通过迭代器访问f.write(hellon) #如果要写入字符串以外的数据,先将他转换为字符串.f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).f.seek(偏移量,起始位置)用来移动文件指针偏移量:单位:比特,可正可负起始位置:0-文件头,默认值;1-当前位置;2-文件尾f.close() 关闭文件6. 模块化6.1. 导入模块模块的查找路径1.当前的目录2.环境变量pythonpath所指的目录列表3.python解释器的安装目录如将代码保存上述的一个目录中的的fibo.py文件中,便可以import fibofibo.function()如果想直接使用fibo.function可以重命名这个函数,如f=fibo.functionf()也可以form fibo import functionfunction()甚至可以formfiboimport*可以form包.子包.模块imort函数然后就直接使用该函数,不需要加前缀6.2. 包引用推荐写法为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模块6.3. 面向对象6.3.1. 概要class classname: 类文档,可以通过类名._doc_访问 def f(self):#self为每个类函数的必要的一个参数,可以通过它来访问当前实例 return self.content def _init_(self,word=):#构造函数 #构造函数,可以初始化变量,可以有参数 self.content=word self._name=word #私有变量,以_开头,不以_结尾的变量创建类实例x=classname(good)6.3.2. 类继承classderivedclassname(bassclassname): pass如果基类定义在另一个模块中, 要写成modname.baseclassname派生类的函数会覆盖基类的同名函数如果想扩充而不是改写基类的函数,可以这样调用基类函数baseclassname.methodname(self,arguments)注意:该基类要在当前全局域或被导入class a: def hi(self): print aclass b: def hi(self): a.hi(self) super(b).hi() #通过super关键字可以获得当前类的基类 print bb().hi()输出ab6.3.3. 多重继承类多继承class derivedclassname(base1,base2,base3): pass对于该类函数的解析规则是深度优先,先是base1,然后是base1的基类,诸如此类.class a: def hi(self): print aclass b: def hi(self): print b class c(a,b): passc().hi()输出:a6.4. 操作符重载通过定义类的一些约定的以开头并结尾的函数,可以到达重载一些特定操作的目的,下面是是一些常用的重载6.4.1. _str_ / _unicode_当print一个对象实例时,实际是print该实例str()函数的返回值.class a: def _str_(self): return a def _unicode_(self): return uaprint a()print unicode(a()输出auaunicode和str类似,不过返回unicode字符串.6.4.2. 比较操作xy x.lt(y)x=y x.le(y)x=y x.eq(y)x!=y 或 xy x.ne(y)xy x.gt(y)x=y x.ge(y)cmp( self, other)用来简化比较函数的定义self other时返回正数class a: def _init_(self,i): self.i=i def _cmp_(self,other): return self.i-other.iprint a(1)a(2)输出false6.4.3. _iter_for . in 循环即就是通过这个函数遍历当前容器的对象实例可配合yield方便的编写这个函数(参见基本语法yield)class a: def _init_(self,n): self.n=n def _iter_(self): n=self.n while n: m=n%2 n/=2 yield mfo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论