Python学习笔记_第1页
Python学习笔记_第2页
Python学习笔记_第3页
Python学习笔记_第4页
Python学习笔记_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

1、Python基本数据类型讲解1、python一切皆为对象2、Python一切皆为指针3、基本数据类型Int bool(True False) string list tuple (元组)diet 字典4、数据类型的可变与不可变Int bool string不可变类型List tuple diet 可变类型5、变量赋值一切皆为引用,动态性与动态类型只为何不在动态。Type isinstanee字符串认知与应用1、字符串概念2、len之认识3、转义符让文本更好处理要转义的字符前面加反斜杠4、字符串前面小尾巴到底是什么u"哈哈”Unicode 编码r"哈哈”不转码5、替换字符串r

2、eplace6、字符串拼接join(a,b,c)7、读写文件d=open(文件名',W)d.write( hi.nsecond hi.)d.close()d=open(文件名',r)d.readline() / d.read(0)Python基本数据类型讲解1、数据类型与可变类型变量2、再谈字符串序列到底是什么1、三个符号的区别,”',"2、如何修改字符串 replace find3、格式化细究1、格式化方式this is a %s % apple"2、format格式化方式this is a 1 0' .format( apple” , m

3、y")this is a fruit whose” . format(fruit= apple” whose= my”)3、为什么要用format4、还有一个方法,字典来了4、再议打开文件linecache1、读文件.getline()2、读文件.getlines()列表1、有序的集合2、通过偏移来索引,从而读取数据3、支持嵌套4、可变的类型1、切片 slice正向索引a = 1 , 2,3, 4, 5, 6, 7 number1 : 3 2 3反向索引默认索引2、添加操作+生成一个新的列表Extend接收参数并将该参数的每个元素添加到原有列表中Append添加任意对象到列表的末端I

4、nsert插入任意对象到列表中,可以控制插入位置。3、修改操作修改列表本身只需要直接赋值就行4、删除操作Del 通过索引删除指定位置元素 非函数 例如:del number9Remove移除列表中指定值的第一个匹配值Pop返回最后一个元素,并从list中删除5、成员关系:返回一个In/not in我们可以判断一个元素是否在列表里bool类型6、列表推导式:expr for iter_var in iterable首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内 容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表 达式的计算值生成一个列表。比

5、如要生成一个包含1至U10的歹U表x for x in range(1,11)expr for iter_var in iterable if cond_expr只有满足条件才可以生成列表。7、排序翻转sortreverse1、内置list方法A = Cdc”List(a)返回一个列表,参数是可迭代对象。里面输出内容还是保持了传入 的可迭代对象的元素和顺序.如果参数为空,则返回一个空的列表2、 xrange和range的具体区另U2.1、 xrange 的用法Xrange时始,结束,步长)Range直接生成一个列表对象Xrange "它是生成一个xrange对象Xrange 用法:1

6、、操作一个非常大的数据,而且内存比较吃紧时。2、Xrange一般用在循环里边。简单函数1、def定义函数的关键字2、形参不需要类型修饰3、函数体定义需要:4、函数体整体进行缩进5、函数可以拥有返回值,若无返回值返回 None,相当于C中的 NULL局部变量与全局变量1、局部变量作用域覆盖全局变量2、函数内有局部变量定义,解释器不使用全局变量,局部变量 的定义晚于被引用,报错3、代码体内可以直接访问全局变量4、函数体内修改全局变量,必须使用关键字 global表达式算术表达式逻辑表达式关系表达式位运算语法格式缩进表示,函数、分枝、循环。:千万不能丢List列表(数组)元组Tuple(R读列表)字

7、典Dictiontory 键值对Direct help(dict)X = Dict( fdfd' , erer),)X = Dict( fdf" = ee'")X.fromkeys(keys, values)方法:keysvalues()setdefault(keys,values)集合: set frozenset字符串处理与特殊函数:单引号 双引号行)模块:文档字符串'xxxxxx乂xxx._doc_关键字参数:def hello(name , words)items() get()三引号(支持字符串跨Hello(name="mmmm&

8、quot;,words="dfdfdf")默认参数收集参数lambda参数:表达式(返回值)filter()map()import syssys.setrecursionlimit(1000000) 递归最大深度在Python类中定义的方法通常有3种:实例方法、类方法、以及静态方法实例方法一般以self做为参数类方法一般以cls做为参数,定义时使用classmethod那么通过引用 的必定是类对象的属性和方法。静态方法不需要默认的任何参数,定义时使用staticmethod引入模块方法:import mathmath.sin(32)或者from math import *s

9、in(32)常量命名时通常使用大写字母,如:NAME=hello'OS模块:文件操作永久保存(保存为文件)#写Import pickleMylist = 口Picklefile = open(mylist.pkl ' ,Wb')Pickle.dump(Mylist , picklefile)Picklefile.close()#读Picklefile = open(mylist.pkl ' , rb ")Mylist = pickle.load(pickfile)Exceptiontry:except Error as reason:finally:r

10、aise Error 类型引发异常Else语句语句要么怎样,要么不怎样if else 语句干完了能怎样,干不完就别想怎样while else没有问题,那就干吧Try:Except Error as reason:Else:Try:With open( hello.txtxExcept OSError as reason:Print(reason),r' ) as f例如:with语句(关闭文件)Try:F = open('hello.txtx” , r')Except OSError as reason:Print(reason)Finally:F.close()类的属

11、性与方法我们约定:类名以大写字母开头OO的特征OOP面向对象编程封装(信息隐蔽技术)继承多态构造方法init_(self , paramerl, paramer2,)公有和私有无关键字,理论上类的方法与属性都是公开的,Python采用了一种name mangling (名字改编,名字重组)即添加即为私有属性。(可以通过 一类名属性访问私有属性)继承:class子类名(父类名1,父类名2,.)如果子类中定义与父类名字一样的方法或者属性,则覆盖父类的属性或方法。使用 super ()函数 super()._init_()类定义、类对象和实例对象WWW FISHC.COM类,类对象我宾例对蒙美定义美

12、对象实例对象属性名与方法名相同,属性覆盖方法。绑定:Python要求方法必须有实力才能被调用,这种限制就是绑定BIFIssubclass仟类,(父类或父类元组)Isinstance时象类型,(父类或父类元组)Hasattr*寸象,属性名)Getattr(object , name,default)Getattr(A , X您所打印的属性不存在”)Setattr(object, name, value)Delattr(object, name)(属性设置属性)property(fget, fset, fdel, doc)例如;X = property(getsize , setsize, del

13、size)构造和析构_new_(cls,.)_init_(self,)del(self)_add_<5fiit other)定义加注的行为i*_5曲_闻£ other)定义期曲那mul (self, other)定义乘法的行为:*tru«dlv (养优 other)定义真1蝴如行为少_floordiv_ fselt other)定比超I除法的行为:/mod (self, other)定量取律赣挪h为;%divmod (self other)定义当被divnwdO调用时的h为pow 丫州 otfwrL modulo)定义当被gw祈Q调胆或“运O时的行为1shltt_ (

14、self* other)定义城左移位的行为:«_ rshltt _(self other)定我礴心移恒的行为:> >_and_(selt QthedH义按位作的行为;&xor (sei,, other)定雌位异或探仔的行为;事_or_(se1t oth«r)定义按位或操作的行为Utime模块属性访问:flcTBCFiftW EOMWWW FIBHC.COM属性扬冏Igetattr_(selfj name)-定义肯用户试图获取一个不存在的属性时的行为getattribute_(selfname)定义当诙类的属性秘访问时的行为 _setattr_(selfj

15、 name value) 一定义当一个属性波设置时的行为_delattr_(selfj name)-定义当一¥属性夜制除时的行为描述符:将某种特殊类型的类的实例指派给另一个类的属性。特殊类型实现三个方法_get_(seld , instance, owner)用于访问属性,它返回属性的值。_set_(self, instance, value)将在属性分配操作中调用,不反回任何 内容。_delete_(self , instance)控制删除操作,不反回任何内容定制容器:协议(编程接口)如果定制的容器不可变,需要定义len(se胡口getitem_(self,key) 方法。如果定制

16、的容器不可变,需要定义len()、getitem()、 _setitem_(self,key, value) 口_delitem_(self, keyW法。迭代器:iter()next()例如:string = hello”it = iter(string)next(it)生成器:是迭代器的一种实现。普通函数加上 yield即可。协同进程 就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的 时候从程序离开的地方继续或者重新开始。def myGen():print("hello")yield 1yield 2结果:>>> next(m) hello

17、>>> next(m)2模块:容器:数据的封装函数:语句的封装类:方法和属性的封装模块:程序命名空间:导入模块:第一种:import模块名第二种:from模块名import函数名第三种:import模块名as新名字If _name_ = _ main_'(区分模块与主程序)搜索路径:import sysSys.pathSys.path.append(路径”) 添加搜索路径包(package):1、创建一个文件夹。(包名)2、文件夹内创建一个 _init_.py文件,可以是空文件。3、导入包 import包名.模块名Python 自己带着电池 Batteries inc

18、luded开发哲学 优雅、明确、简单开发者的哲学用一种方法,最好是只有一种方法来做一件事Python标准库Import 模块名模块名._doc_dir(模块名)属性模块名._all_调用的方法模块名._file_ 查看文件路径爬虫:Python如何访问互联网。urllib URL + libURL有三部分组成:协议 IP地址资源的具体地址import urllib.requestresponse = urllib.request.urlopen("http:500/600")cat_img = response.read()with open("cat_500_6

19、00.jpg", 'wb') as f:f.write(cat_img)修改 headers:通过Request的headers参数修改通过 Request.add_header(方法修改延迟提交时间:import timetime.sleep()代理:步骤:1、参数是一个字典类型:代理IP:端口号proxy_support = urllib.request.ProxyHandler()2、定制、创建一个 openeropener= urllib.request.build_opener(proxy_support)3、安装 openerurllib.request.

20、inatall_opener()4、调用 openeropener.open(url)正则表达式:import rere.search(正则表达式,字符串)元字符:.八 $*+? |()re.findall(正则表达式,字符串)那么你可以先将该正则如果你需要重复的使用某个正则表达式, 表达式编译成模式对象。我们使用re,compile()来编译。例如:p = pile(r”A-z'')r = p.search字符 串)r.group()Scrapy:Tkinter:TK + Interface(默认 GUI 库)import tkinterDjango:Python 优点:简单

21、、优雅、明确强大的第三方库易移植面向对象可扩展(CJava'C#)Python 缺点:代码不能加密速度慢Linux编译Python文件时,必须添加一句:#!/usr/bin/env pythonPython解释器:1、Cpython官方标准2、Ipython3、Jython4、PYPY5、IronPython .net versionPython编程风格:语法要求:缩进统一变量:大写(常量)小写(变量)Python数据类型指罹Mas 聿堂最 承精度怦.点型 不品内停工出:,PytiRA 加X可岫制的一不即费瓯器桑亚数字会史不可受言(f«MWT5*t) 百本有里口寸TEtt(t

22、Up)a .”“卜口按特征划分:1、数字类型整型布尔型(True False 非整型物匕打时苴票等我崂不十英事合 (frwemetjQ售hsi(临时变性弱方下制麦野衡带泰手制费廉xn前奏台(ieO长整型标准整形双精度浮点型2、序列类型字符串(str)元组3、映像类型字典(diet)4、集合类型可受集合复数 decimal (不是内建数据类型)列表不pJ受集合Python注释单行注释:#多行注释三引号理解字符编码:ASSI加Unicode 码UTF-8码(Python3默认编码方式)# * coding:utf-8 * 导入模块:Import模块名from 模块名 importImport 模块

23、名 as new用户交互:input()输出的结果是字符串格式化输出:s %d %f流程控制:if elif elseStrip (去掉字符)split (切割 分割) len()elsewhile文件处理的模式:rwar b 尽量加bw babFile的方法:方法:close()seek()确定文件读写位置1.file.seek(off, whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。tell() 回到文件当前位置next()

24、 迭代方法 = readline()truncate。截断文件writelines(列表、元组)文件内容替换属性:closed encoding mode name123456789101112131415161718192021222、1234567891011121314151、文件写入import timeimport random# 打开模式列表:# w以写方式打开,# a以追加模式打开(从EOF开始,必要时创建新文件)# r+以读写模式打开# w+以读写模式打开(参见w )# a+以读写模式打开(参见a )# rb以二进制读模式打开# wb以二进制写模式打开(参见w)# ab以二进制

25、追加模式打开(参见a )# rb+以二进制读写模式打开(参见r+ )# wb+以二进制读写模式打开(参见w+ )# ab+以二进制读写模式打开(参见a+ )f = open ('tpm.txt' , 'a+')fori in range (10): f.write(time.strftime('%Y-%m-%d %H:%M:%S')f.write( ' '+ str (random.randint(0, i)+ 'n')f.close()文件读取f = open ('tpm.txt' )# read

26、 方式读取s = f.read()print (s,'nnn')print (f.tell()# 上面读取完后指针移动到最后,通过 seek将文件指针移动到文件头 f.seek( 0)# 使用readline每次读取一行while (True ):line = f.readline()print (line)if (len (line) = 0): breakf.close()3、文件目录操作(OS包)2 345 678910111213141516171819202122232425 os#os模块,处理文件和目录的一系列函数import os# 打印当前目录下的所有文件非递

27、归print (os.listdir(os.getcwd()# 切换目录为当前目录os.chdir('.')# 判断目标是否存在,不存在则创建if (os.path.exists( './osdirs') = False ):os.mkdir( "./osdirs" )#重命名文件或目录名if (os.path.exists( "./os" ) = False ): os.rename( "./osdirs" , "./os")#rmdir删除目录,需要先清空文件中的子目录或文件夹#

28、removedirs可多层删除目录(需要目录中无文件)makedirs可多层创建目录if (os.path.isdir( "./os"):os.rmdir( "./os")#删除文件if (os.path.exists( './tpm.txt' ): os.remove( './tpm.txt' )模块中常用方法和属性:属性os.linesep文件中分割行的字符串os.sep文件路径名的分隔符os.curdir当前工作目录的字符串名称os.pardir父目录字符串名称方法os.remove()删除文件os.rename()

29、重命名文件os.walk()生成目录树下的所有文件名os.chdir()改变目录os.mkdir/makedirs 创建目录/多层目录os.rmdir/removedirs 删除目录/多层目录listdir()列出指定目录的文件getcwd()取得当前工作目录 (current work directory)chmod()改变目录权限os.path.basename() 去掉目录路径,返回文件名os.path.dirname()去掉文件名,返回目录路径os.path.join()将分离的各部分组合成一个路径名os.path.split()返回 d dirname(),basename()元组

30、os.path.splitext()(返回 filename,extension)元组 os.path.getatimectimemtime 分别返回最近访问、创建、修改时间 os.path.getsize() 返回文件大小 os.path.exists()是否存在 os.path.isabs()是否为绝对路径 os.path.isdir() 是否为目录 os.path.is巾le()是否为文件4、文件目录操作(shutil包)1234567891011121314151617181920import os import shutil# 复制文件,相当于 CP命令 shutil.copy( &

31、#39;start2.txt' , 'start3' )# 移动文件或目录,相当于 MV命令 shutil.move( 'start3' , 'start4' )if (os.path.exists( './a/b/c') = False ):os.makedirs( './a/b/c')# 删除目录shutil.rmtree( './a')if (os.path.exists( './a/b/c/d') = False ):os.makedirs( './a/b/c

32、/d')# 复制目录if (os.path.exists( 'b' ) = False ): shutil.copytree( 'a' , 'b')shutil中常用方法copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException.如果当前的dst已存在的话就会被覆盖掉copymode( src, dst)只是会复制其权限其他的东西是不会被复制的copystat( src, dst)复制权限、最后访问时间、最后修改时间copy( src, dst)复制一个文件

33、到一个文件或一个目录copy2( src, dst)在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于 cp巾的东西copy2( src, dst)如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作copytree(olddir,newdir,True/Flase) 把 olddir 拷贝份 newdir ,如果第 3 个参数是True,则复制目录时将保持文件夹下的符号连接,如果第 3个参数是False ,则将在复制的目录下生成物理副本来替代符号连接rmtree(path, ignore_errors, on

34、error) 删除目录move( src, dst) 移动文件或 目录5、应用-遍历文件夹1 import os2 #遍历当前路劲下的所有目录和文件夹3 #返回元组包含三个参数:1.父目录2.所有文件夹名字(不含路径)3.所有文件名4 字5 for root, dirs, filesin os.walk(os.getcwd():6 #输出文件夹信息7 for dir indirs:8 print (os.path.join(root, dir )9 #输出文件信息10 for file infiles:print (os.path.join(root, file )6、总结Python的文件操

35、作和PHP类似,都有现成的函数去实现,所以基本上记住常用的函数就可 以了。字符串处理:S.find(子串,开始,S.rfind(子串,开始,S.index仔串,开始,S.rindex仔串,开始,S.count仔串,开始,结束)结束)结束)ValueError结束)结束).”nd!«ihTring. Bel and! *生理医查线子串.返回索弓卜直.否则返孤1+ S.rfindfsubstrina.(start Lendll) #后方杳S.indexfsubslring,start Lend) #find.只是找不到产生VdueEgr异常S.rindex (substring, sta

36、rt end j)# 向上反反查找S.count(substring,start (,endl)岂找到子田的个数S.lowercasef) S.capitalize() S.lower(| S.upperf) S.swapcase()#首字出大写#转小写#转大写#大小写互换S.split(str/1 #stringlist.以空格切分S.joindist11 #将时转市ng.以空格连接处理字符史的内置函数len(str)#率长度cmp(Mmy friend: str) #字符王上观°第一个大.返回1maxCabcxyzl #寻找字符串中最大的字符min(abcxyz')#寻找

37、字符串中最小的字符L appendfvar)考运扪元疾Lias er Uindexvar)L poplar) Lremoveivar) L ccunt(1*ar) Lindex(var) LextendCist)LsortQ LrererseO#返叵最吕 j元亚.并从五成二忍涂之#我等第一处现的该元票件该元格更名=出现旷衰二三二药二二亘三二匚三三#追加如1,即合并Use至L上羽玄第产3二机=或操隹行 目子于Kn 讨敲口2开3#为上 25334K nextendO2*4#为忆凌:2del LEU铀除搭足下笆元素del Ll:3#秋算走运下标范画的元套五3t的复利L1=L芬L1为密别名,弓归说咫是

38、在针视:由同,近L1提恃口对L揖作U = LBSLK-COPY字典DietD.get(key, 0) D.has_key(key) D.keysf)#lq;dlctkey.多了个没肓则返回联管值.Oo 没有功见异常#有该重返回TRUE.否则FALSE/返叵了如行的女表D.values(|*以列表的形式返©字陶中的值.近©值刃歹表B可包含聿豆元素D.item5l#将所有的字典明以列表方式返回.这普列表中的第一项都采自于(键值).但是项在返回时并没有得殊的版序D.update(dlct2)¥增加合并字典D.popitemO#得到一个pcir.并从字典中剔除它。己空川7

39、2异常D.dear(|,清空子典.同del dietD.copy()#挎贝字典D.cmp(dictEdict?) #比较字蕤.(优先级为元素个数、炙大小.警情大小)、#第一个大返回1.小返©1 一在返叵0dictionary 的复电dlctl =dlct # 别名dict2=cfcct.copy0 #克陵.即另一人挎贝.old boy. me列表vs字典 die 传-查找和插入的速度极快,不会随着key的增加而增加;-需要占用大量的内存,内存浪费多。-KEY不可变-默认无序 list:-占用空间小,浪费内存很少。-通过下标查询-有序fdboy.meSET集合特点: 无序 元素不重复

40、功能: 关系测试 去重关系测试:测试两组数据的关系name_set = set1,2, 3, 4r c/dbQy.nieSET集合运算。二同123,4)b = set(345)a & b #求交集 aJntersection(b)a | b #求并集 aynion(b)a - b # 求差集 a.difference(b:'a A b #求对称差集 CLsymmetic difference(b) aJssubset(b) #a 是b 的子集 aJssuperset(b) # a 是否包含b/直算强Man模块和模块的常用方法 至关重要的_init_.py 是否为主文件:_nam

41、e_ ifname = 'main 1 当前文件路径i file 当前文件描述:doc_模块写法加上一句;If _name_ = _ main_':Pass函数式编程原则一:研发带来附加值的产品。原则二:研发基于最小成本原则。原则三:任何成功的软件产品都会面临重新开发。oJdbome,参辄默认参数可变参数返回值/数式编程def Fun(arg;*args;*kargs):print argprint argsprint kargsreturn sueces5*args 可变参数列表列表传参*kargs 可变参数列表字典传承Python ' s with statemen

42、t provides a very convenient way of dealing with the situation where you have to do a setup and teardown to make something happen. A very good example for this is the situation where you want to gain a handler to a file, read data from the file and the close the file handler.有一些任务,可能事先需要设置,事后做清理工作。对

43、于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄, 从文件中读取数据,然后关闭文件句柄。Without the with statement, one would write something along the lines of:如果不用with语句,代码如下:1file= open ("/tmp/foo.txt")2data = file .read()3file .close()There are two annoying things here. First, you end up forgett

44、ing to close the file handler. The second is how to handle exceptions that may occur once the file handler has been obtained. One could write something like this to get around this:这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进 行任何处理。下面是处理异常的加强版本:1file = open ("/tmp/foo.txt" )2try :3 data = file .r

45、ead()4finally :5 file .close()While this works well, it is unnecessarily verbose. This is where with is useful. The good thing about with apart from the better syntax is that it is very good handling exceptions. The above code would look like this, when using with:虽然这段代码运行良好,但是太冗长了。这时候就是with 一展身手的时候

46、了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是 with版本的代码: 1with open ("/tmp/foo.txt" ) as file :2 data = file .read()一i u -r-1 .- r 一 B 一一 -i 一 u - rwith如何工作?while this might look like magic, the way Python handles with is more clever than magic. The basic idea is that the statement after with has

47、 to evaluate an object that responds to an _enter_() as well as an _exit_() function.这看起来充满魔法,但不仅仅是魔法,Python对with的处理还很聪明。基本思想是with所求值的对象必须有一个_enter_()方法,一个_exit_()方法。After the statement that follows with is evaluated, the _enter_() function on the resulting object is called. The value returned by th

48、is function is assigned to the variable following as. After every statement in the block is evaluated, the exit() function is called.紧跟with后面的语句被求值后,返回对象的 enter()方法被调用,这个方法的返回值 将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的_exit_()方法。 This can be demonstrated with the following example:下面例子可以具体说明with如何

49、工作:1 #!/usr/bin/env python2 # with_example01.py345 class Sample:6 def _enter_(self ):7 print"In _enter_()”8 return "Foo"910 def _exit_(self , type , value, trace):11 print"In _exit_()”121314 def get_sample():15 return Sample()161718 with get_sample() as sample:19 print "samp

50、le:" , sampleWhen executed, this will result in:运行代码,输出如下1 bash - 3.2 $ . / with_example01.py21n _enter_()3sample: Foo41n _exit_()As you can see, The _enter_() function is executed The value returned by it - in this case "Foo" is assigned to sample The body of the block is executed, t

51、hereby printing the value of sample ie. "Foo" The _exit_() function is called. What makes with really powerful is the fact that it can handle exceptions. You would have noticed that the exit() function for Sample takes three arguments - val, type and trace. These are useful in exception ha

52、ndling. Let' s see how this wadifsiby the above example.正如你看到的,1. enter()方法被执行 2. enter()方法返回的值 -这个例子中是 "Foo",赋值给变量'sample' 3.执行代码块,打印变量 "sample"的值为"Foo" 4. _exit_()方 法被调用 with真正强大之处是它可以处理异常。可能你已经注意到 Sample类的 exit 方法有三个参数-val, type 和trace。这些参数在异常处理中相当有用。我们来改

53、一下代码, 看看具体如何工作的。1 #!/usr/bin/env python2 # with_example02.py345 class Sample:6def_enter_(self):7returnself89def_exit_(self,type , value, trace)10print"type:",type11print"value:",value12print"trace:",trace1314defdo_something(self ):15bar=1/016returnbar +101718 with Sampl

54、e。as sample:19 sample.do_something()Notice how in this example, instead of get sample(), with takes Sample(). It does not matter, as long as the statement that follows with evaluates to an object that has an _enter_() and _exit_() functions. In this case, Sample()' s _enter_() returns tcreated instance of Sample and that is what gets passed to sample.这个例子中,with后面的get_sample()变成了 Sample。这没有任何关系,只要紧跟 with后面的语句所返回的对象有_enter_()和_exit_(访法即可。此例中, Sample()的_enter_()方法返回新创建的 Sample对

温馨提示

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

评论

0/150

提交评论