版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Python的特点1. 简单Python是一种代表简单思想的语言。2. 易学Python有极其简单的语法。3. 免费、开源Python是FLOSS (自由/开放源码软件)之一。4. 咼层语言使用Python编写程序时无需考虑如何管理程序使用的内存一类的底层细节。5. 可移植性Python 已被移植到很多平台,这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/39O、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Shar
2、p Zaurus、 Windows CE 甚至还有 PocketPC。6. 解释性可以直接从源代码运行。在计算机内部,python解释器把源代码转换为字节码的中间形式,然后再把它翻译成计算机使用的机器语言。7. 面向对象Python既支持面向过程编程也支持面向对象编程。8. 可扩展性部分程序可以使用其他语言编写,如C/C+。9. 可嵌入型可以把Python嵌入到c/c+程序中,从而提供脚本功能。10. 丰富的库Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文
3、件、密码系统、GUI (图形用户界面)、Tk和其他与系统有关的操作。- 分割线- 以下是 Python的基本语法 -一、基本概念1. python中数有四种类型:整数、长整数、浮点数和复数。整数,如1长整数 是比较大的整数浮点数女口 1.23、3E-2复数 女口 1 + 2j、 1.1 + 2.2j2. 字符串(字符的序列)python中单引号和双引号使用完全相同。使用三引号(”或”)可以指定一个多行字符串。转义符自然字符串, 通过在字符串前加r或R。如rthis is a line with n则n会显示,并不是换行。pytho n 允许处理 un icode 字符串,加前缀 u 或 U ,
4、女口 uthis is an uni code stri ng。字符串是不可变的。按字面意义级联字符串,如 this is string会被自动转换为this is string。3. 标识符的命名第一个字符必须是字母表中字母或下划线_。标识符的其他的部分有字母、数字和下划线组成。标识符对大小写敏感。4. 对象python程序中用到的任何“东西”都成为“对象”。5. 逻辑行和物理行物理行是我们在编写程序时看到的,逻辑行则是python看到的。python中分号;标识一个逻辑行的结束,但是实际中一般每个物理行只写一个逻辑行,可以避免使用分号。 多个物理行中可以写一个逻辑行,如下:s = pete
5、r is writi ng this article上面 的使用被称为明确的行连接,又如:print peter6. 缩进空白在python是非常重要的,行首的空白是最重要的,又称为缩进。行首的空白(空格和制表符)用来决定 逻辑行的缩进层次,从而决定语句分组。这意味着同一层次的语句必须有相同的缩进,每一组这样的语句称为一个块。注意:不要混合使用空格和制表符来缩进,因为在跨越不同的平台时无法正常工作。二、运算符与表达式1.运算符与其用法运算符名称 说明 例子+力口 两个对象相加 3 + 5得到8。a + b得至U ab。- 减 得到负数或是一个数减去另一个数-5.2得到一个负数。50 - 24得
6、到26。* 乘 两个数相乘或是返回一个被重复若干次的字符串2 * 3得到6。la * 3得到lalala。幂返回x的y次幕3 * 4 得至U 81 (即 3 * 3 * 3 * 3 )/ 除 x除以y 4/3得到1 (整数的除法得到整数结果)。4.0/3或4/3.0得到1./ 取整除返回商的整数部分4 / 3.0得到1.0% 取模 返回除法的余数 8%3得到2。-25.5%2.25得到1.5左移把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1) 2 右移把一个数的比特向右移一定数目11 1得到5。一一 11按比特表示为1011,向右移动1比特后得到101,即十进制
7、的5。& 按位与数的按位与5 & 3得到1。| 按位或数的按位或5 | 3得到7。A按位异或数的按位异或5A 3得到6按位翻转x的按位翻转是-(x+1) 5得到6。 小于 返回x是否小于y。所有比较运算符返回 1表示真,返回0表示假。这分别与特殊的变量 True和False 等价。注意,这些变量名的大写。5 3返回0 (即False)而3 5返回1 (即True)。比较可以被任意连接: 3 5 大于 返回x是否大于y 5 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。=小于等于返回x是否小于等于y x = 3; y = 6; x =大于等于
8、返回x是否大于等于y x = 4; y = 3; x = y返回True。一等于比较对象是否相等x : =2; y =2; x =y 返回True。x = str; y = stR; x = y 返回 False。x = str; y = str;x = y 返回 True。!= 不等于比较两个对象是否不相等x = 2; y = 3; x != y返回True。not布尔非” 如果x为True,返回False。如果x为False,它返回 True。x = True; not y返回False。and布尔与” 如果x为False,x and y返回False,否则它返回 y的计算值。x = Fa
9、lse; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False (因为x是False)。这个现象称为短路计算。or 布尔或” 如果x是True,它返回True,否则它返回y的计算值。x = True; y = False; x or y 返回True。短路计算在这里也适用。2. 运算符优先级(从低到高)运算符描述lambda Lambda 表达式or布尔“或”and布尔“与”not x 布尔“非”in, not in 成员测试is, is not同一性测试,=,=,!=,= 比较| 按位或A 按位异或&
10、 按位与, 移位+,-加法与减法*,/,%乘法、除法与取余+x, -x 正负号x按位翻转* 指数x.attribute属性参考xi ndex下标xindex:index寻址段f(argume nts.)函数调用(experessi on,.)绑定或元组显示expressi on,列 表显示key:datum,.字典显示expressi on,字符串转换3. python控制台输出使用printprint abc#打印abc并换行print abc%s % d#打印 abcdprint abc%sef%s % (d, g)#打印 abcdefg三、控制流1. if语句i = 10n = in t
11、(raw_i nput(e nter a nu mber:)if n = i:prin t equalelif n i:prin t lower else:prin t higher2. while 语句while True:passelse:pass#else语句可选,当 while为False时,else语句被执行。pass是空语句。3. for 循环 r i in ran ge(0, 5):print ielse:pass#打印0到4注:当for循环结束后执行 else语句;range(a, b)返回一个序列,从a开始到b为止,但不包括b, range默认步长为1,可以指
12、定步长,range(0,10,2);4. break 语句终止循环语句,如果从for或while中终止,任何对应循环的else将不执行。5. continue 语句continue语句用来调过当前循环的剩余语句,然后继续下一轮循环。四、函数函数通过def定义。def关键字后跟函数的标识符名称,然后跟一对圆括号,括号之内可以包含一些变量名,该行 以冒号结尾;接下来是一块语句,即函数体。def sumOf(a, b):return a + b1. 函数形参函数中的参数名称为形参,调用函数时传递的值为实参2. 局部变量在函数内定义的变量与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来
13、说是局部的。这称为变量的作用域。global语句,为定义在函数外的变量赋值时使用global语句。def fun c():global xprin t x is , xx = 1x = 3fun c()print x#3#13. 默认参数通过使用默认参数可以使函数的一些参数是可选的。def say(msg, times =1):print msg * timessay(peter)say(peter, 3)注意:只有在形参表末尾的那些参数可以有默认参数值,即不能在声明函数形参的时候,先声明有默认值的 形参而后声明没有默认值的形参,只是因为赋给形参的值是根据位置而赋值的。4. 关键参数如果某个函
14、数有很多参数,而现在只想指定其中的部分,那么可以通过命名为这些参数赋值(称为关键参 数)。优点:不必担心参数的顺序,使函数变的更加简单;假设其他参数都有默认值,可以只给我们想要的那些参 数赋值。def fun c(a, b=2, c=3):prin t a is %s, b is %s, c is %s % (a, b, c)fun c(1) #a is 1, b is 2, c is 3fun c(1,5) #a is 1, b is 5, c is 3fun c(1, c = 10) #a is 1, b is 2, c is 10fun c(c = 20, a = 30) #a is 3
15、0, b is 2, c is 205. return 语句return语句用来从一个函数返回,即跳出函数。可从函数返回一个值。没有返回值的return语句等价于return None。 None表示没有任何东西的特殊类型。6. DocStrings (文档字符串)def fun c():This is self-defi ned functionDo n othi ngpassprint func. _doc_#This is self-defi ned fun cti on#Do nothing五、 模块模块就是一个包含了所有你定义的函数和变量的文件,模块必须以.py为扩展名。模块可以从其
16、他程序中输入(import)以便利用它的功能。在python程序中导入其他模块使用import,所导入的模块必须在sys.path所列的目录中,因为sys.path第一个字符串是空串唧当前目录,所以程序中可导入当前目录的模块。1.字节编译的.pyc文件导入模块比较费时,python做了优化,以便导入模块更快些。 一种方法是创建字节编译的文件,这些文件以.pyc为扩展名。pyc是一种二进制文件,是py文件经编译后产生的一种byte code,而且是跨平台的(平台无关)字节码,是有python虚拟机执行的,类似于java或.net虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编
17、译后的pyc文件是不同的。2. from . import如果想直接使用其他模块的变量或其他,而不加模块名+.前缀,可以使用from . import。例如想直接使用 sys 的 argv,from sys import argv 或 from sys import *3. 模块的 _name_每个模块都有一个名称,py文件对应模块名默认为py文件名,也可在py文件中为_name_赋值;如果是_name_,说明这个模块被用户单独运行。4. dir()函数dir(sys)返回sys模块的名称列表;如果不提供参数,即dir(),则返回当前模块中定义名称列表。del -删除一个变量/名称,del之后
18、,该变量就不能再使用。六、 数据结构python有三种内建的数据结构:列表、元组和字典。1.列表list是处理一组有序项目的数据结构,列表是可变的数据结构。列表的项目包含在方括号 中,eg: 1,2, 3,空列表。判断列表中是否包含某项可以使用in,比如I = 1,2, 3; print 1 in l; #True;支持索引和切片操作;索引时若超出范围,贝U IndexError ;使用函数len()查看长度;使用 del可以删除列表中的项,eg: del l0 #如果超出范围,贝UIn dexErrorlist函数如下:即pend (value)-向列表尾添加项 valuel = 1,2,
19、2l.appe nd(3) #1,2, 2, 3count(value)-返回列表中值为value的项的个数l = 1,2, 2prin t l.cou nt(2) # 2exte nd(lis t2)-向列表尾添加列表list2I = 1,2, 2II = 10, 20l.exte nd(l1)print I #1,2, 2, 10, 20index(value, start, stop)-返回列表中第一个出现的值为value的索引,如果没有,则异常 ValueErrorl = 1,2, 2a = 4try:print l.i ndex(a)except ValueError, ve:pri
20、n t there is no %d in list % ainsert(i, value)-向列表i位置插入项vlaue,如果没有i,则添加到列表尾部l = 1,2, 2l.i nsert(1, 100)print I #1, 100, 2, 2l.i nsert(100, 1000)print I #1, 100, 2, 2, 1000pop(i)-返回i位置项,并从列表中删除;如果不提供参数,则删除最后一个项;如果提供,但是i超出索引范围,则异常In dexErrorl = 0, 1,2, 3, 4, 5prin t l.pop() # 5print I #0, 1,2, 3, 4pri
21、n t l.pop(1) #1print I #0, 2, 3, 4try:l.pop(100)except In dexError, ie:prin t i ndex out of ran geremove(value)-删除列表中第一次出现的value,如果列表中没有 vlaue,则异常ValueErrorI = 1,2, 3, 1,2, 3l.remove(2)print I #1,3, 1,2, 3try:l.remove(IO)except ValueError, ve:prin t there is no 10 in listreverse() -列表反转l = 1,2, 3l.r
22、everse()print I #3, 2, 1sort(cmp=None, key=None, reverse=False)-歹 U表排序【Python Library Referenee 】cmp:cmp specifies a custom eomparis on function of two argume nts (iterable eleme nts) which should return a n egative, zero or positive number depending on whether the first argument is considered small
23、er than, equal to, or larger than the second argume nt:cmp=lambda x,y: cmp(x.lower(), y.lower()key:key specifies a function of one argume nt that is used to extract a comparis on key from each list eleme nt: key=str.lower reverse:reverse is a boolea n value. If set to True, the n the list eleme nts
24、are sorted as if each comparis on were reversed .In gen eral, the key and reverse conversion processes are much faster tha n specify ing anequivale nt cmp function. This is because cmp is called multiple times for each list eleme nt while key and reverse touch each eleme nt only once.15 = 10, 5, 20,
25、 1, 3015.sort()prin t l5 #1, 5, 10, 20, 3016 = bed, abc, cde, bbb16.sort(cmp = lambda s1, s2: cmp(s10,s21)prin t l6 #abc, bbb, bed, cde17 = bcd, abc, cde, bbb, faf17.sort(key = lambda s: s1)prin t l7 #faf, abc, bbb, bcd, cde2. 元组tuple和list十分相似,但是tuple是不可变的,即不能修改tuple,元组通过圆括号中用逗号分割的项定义;支持索引和切片操作;可以使用
26、in查看一个元素是否在tuple中。空元组();只含有一个元素的元组(a,) #需要加个逗号 优点:tuple比list速度快;对不需要修改的数据进行写保护,可以是代码更安全 tuple与list可以相互转换,使用内置的函数list()和tuple()。I = 1,2, 3print I # 1,2, 3t = tuple(l)print t # (1,2, 3)II = list(t)prin t l1 #1,2, 3元组最通常的用法是用在打印语句,如下例:n ame = Peter Zhangage = 25prin t Name: %s; Age: %d % (n ame, age)#
27、Name: Peter Zhang; Age: 25函数如下:count(value) -返回元组中值为 value的元素的个数t = (1,2, 3, 1,2, 3)print t.cou nt(2) # 2index(value, start, stop)-返回列表中第一个出现的值为value的索引,如果没有,则异常 ValueErrort = (1,2, 3, 1,2, 3)print t.i ndex (3) # 2try:print t.i ndex(4)except ValueError, ve:prin t there is no 4 in tuple # there is no
28、 4 in tuple3.字典字典由键值对组成,键必须是唯一的;eg: d = key1:value1, key2:value2;空字典用表示;字典中的键值对是没有顺序的,如果想要一个特定的顺序,那么使用前需要对它们排序;dkey = value,如果字典中已有key,则为其赋值为 value,否则添加新的键值对 key/value ;使用del dkey可以删除键值对;判断字典中是否有某键,可以使用in或not in ;d = d1 = oned2 = twod3 = threedel d3for key, value in d.items():prin t %s - %s % (key,
29、value)#1 - one#2 - twodiet函数如下:clear()-删除字典中所有元素d1 = 1:o ne, 2:twod1.clear()print d1 # copy()-返回字典的一个副本(浅复制)d1 = 1:o ne, 2:twod2 = d1.copy()print d2 #1: o ne, 2: twodict.fromkeys(seq,val=None)-创建并返回一个新字典,以序列 seq中元素做字典的键,val为字典所有键对应的初始值(默认为None)l = 1,2, 3t = (1,2, 3)d3 = .fromkeys(l)print d3 #1: None
30、, 2: No ne, 3: Noned4 = .fromkeys(t, default)print d4 #1: default, 2: default, 3: defaultget(key,default)-返回字典 dict中键key对应值,如果字典中不存在此键,则返回 default的值(default默认值为None)d5 = 1:o ne, 2:two, 3:threeprint d5.get(1) #oneprint d5.get(5) #No neprint d5.get(5, test) #testhas_key(key)-判断字典中是否有键keyd6 = 1:o ne, 2
31、:two, 3:threeprint d6.has_key(1)#Trueprint d6.has_key(5)#Falseitems()-返回一个包含字典中(键,值)对元组的列表d7 = 1:o ne, 2:two, 3:threefor item in d7.items():print item#(1, on e)#(2, two)#(3, three)for key, value in d7.items():prin t %s - %s % (key, value)#1 - one#2 - two#3 - threekeys()-返回一个包含字典中所有键的列表d8 = 1:o ne, 2
32、:two, 3:threefor key in d8.keys():print key#1#2#3values()-返回一个包含字典中所有值的列表d8 = 1:o ne, 2:two, 3:threefor value in d8.values():print value#one#two#threepop(key, default)-若字典中key键存在,删除并返回dictkey,若不存在,且未给出default值,引发KeyError 异常d9 = 1:o ne, 2:two, 3:threeprint d9.pop(1) #oneprint d9 #2: two, 3: threeprin
33、t d9.pop(5, None) #No netry:d9.pop(5)# raise KeyErrorexcept KeyError, ke:print KeyError:, ke #KeyError:5popitem()-删除任意键值对,并返回该键值对,如果字典为空,则产生异常KeyErrord10 = 1:o ne, 2:two, 3:threeprint d10.popitem() #(1, on e)print d10#2: two, 3: threesetdefault(key,default) -若字典中有 key,则返回vlaue值,若没有 key,则加上该 key,值为de
34、fault,默认 Noned = 1:o ne, 2:two, 3:threeprint d.setdefault(1)#oneprint d.setdefault (5)#No neprint d #1: o ne, 2: two, 3: three, 5: Noneprint d.setdefault(6, six) #sixprint d #1: o ne, 2: two, 3: three, 5: None, 6: six update(dict2) -把dict2的元素加入到dict中去,键字重复时会覆盖dict中的键值d = 1:o ne, 2:two, 3:threed2 = 1
35、:first, 4:forthd.update(d2)print d #1: first, 2: two, 3: three, 4: forthviewitems() -返回一个view对象,(key, value)pair的列表,类似于视图。优点是,如果字典发生变化, view会同步发生变化。在迭代过程中,字典不允许改变,否则会报异常d = 1:o ne, 2:two, 3:threefor key, value in d.viewitems():prin t %s - %s % (key, value)#1 - one#2 - two#3 - threeviewkeys()-返回一个 vi
36、ew对象,key的列表d = 1:o ne, 2:two, 3:threefor key in d.viewkeys():print key#1#2#3viewvalues()-返回一个 view 对象,value 的列表d = 1:o ne, 2:two, 3:threefor value in d.viewvalues():print value#one#two#three4.序列序列类型是指容器内的元素从0开始的索引顺序访问,一次可以访问一个或者多个元素;列表、元组和字符串都是序列;序列的两个主要特点是索引操作符和切片操作符;索引可以得到特定元素;切片可以得到部分序列;1 nu mber
37、s = zero, on e, two, three, four22 print nu mbers1 # one3 print nu mbers-1 # four4 #pri nt nu mbers5 # raise In dexError65 print nu mbers: # zero, on e, two, three, four6 print numbers3: # three, four7 print nu mbers:2 # zero, on e8print numbers2:4 # two, three9print numbers1:-1 # o ne, two, three切片
38、操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置开始,刚好在结束位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。可以用负数做切片。负数用在从序列尾开始计算的位置。5.绑定当创建一个对象并给它赋一个变量的时候,这个变量仅仅“指向”那个对象,而不是表示这个对象本身!也就是说,变量名指向计算机中存储那个对象的内存,这被称作名称到对象的绑定。如果要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单
39、对象),那么必须使用切片操作符来取得拷贝。七、面向对象编程python支持面向对象编程;类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例。对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域;对象也可以使用属于类的函数,这样的函数称为类的方法;域和方法可以合称为类的属性。域有两种类型-属于实例的或属于类本身;它们分别被称为实例变量和类变量。类使用关键字class创建,类的域和方法被列在一个缩进块中。类的方法必须有一个额外的第一个参数,但是在调用时不为这个参数赋值,这个特殊变量指对象本身,按照惯例 它的名称是self,类似C#中的this。class
40、Ani mal:pass #empty block_i nit_方法在类的一个对象被创建时调用该方法;相当于 C+中的构造函数。_de方法在类的对象被销毁时调用该方法;相当于C+中的析构函数。在使用del删除一个对象时也就调用_del_ 方法。Python中所有的类成员(包括数据成员)都是public的;只有一个例外,如果使用的数据成员以双下划线为前缀,则为私有变量。class Pers on:Cou nt = 0def _init_(self, n ame, age):Pers on.Count += 1self. name = n ameself._age = agep = Perso n
41、(peter, 25)p1 = Perso n(joh n, 20)print Pers on .Co unt #2print p.n ame #peterprint p._age #AttributeError: Pers on in sta nee has no attribute _age继承:为了使用继承,基类的名称作为一个元组跟在类名称的后面;python支持多重继承。下面是一个关于继承的例子:1 class SchoolMember:2Represe nt any school member.3def _init_(self, n ame, age):4self. name = n
42、 ame5self.age = age6prin t I nitializ ing a school member.77def tell(self):8Tell my details9prin t Name: %s, Age: %s, % (self. name, self.age),1110 class Teacher(SchoolMember):11Represe nt a teacher.12def _init_(self, n ame, age, salary):13SchoolMember._init_(self, n ame, age)14self.salary = salary1
43、5prin t I nitializ ing a teacher1816def tell(self):17SchoolMember.tell(self)18prin t Salary: %d % self.salary2219 class Stude nt(SchoolMember):20Represe nt a stude nt.21def _init_(self, n ame, age, marks):22SchoolMember._init_(self, n ame, age)23self.marks = marks24prin t I nitializ ing a stude nt29
44、25def tell(self):26SchoolMember.tell(self)27prin t Marks: %d % self.marks3328 print SchoolMember._doc_29 print Teacher._doc_30 print Student._doc_3731 t = Teacher(Mr. Li, 30, 9000)32 s = Stude nt(Peter, 25, 90)4033 members = t, s4234 for m in members:35m.tell()程序输出如下:Represe nt any school member.Rep
45、rese nt a teacher.Represe nt a stude nt.In itializ ing a school member.In itializ ing a teacherIn itializ ing a school member.In itializ ing a stude ntName: Mr. Li, Age: 30, Salary: 9000Name: Peter, Age: 25, Marks: 90八、输入/输出程序与用户的交互需要使用输入/输出,主要包括控制台和文件;对于控制台可以使用raw_input和print,也可使用str类。raw_input(xxx
46、)输入xxx然后读取用户的输入并返回。1. 文件输入/输出可以使用file类打开一个文件,使用file的read、readline和write来恰当的读写文件。对文件读写能力取决于打开文件时使用的模式,常用模式有读模式(r)、写模式(w)、追加模式(a),文件操作之后需要调用close方法来关闭文件。1 test = ”2 This is a program about file I/O.33 Author: Peter Zhange4 Date: 2011/12/255 ”76 f = file(test.txt, w) # ope n for writ ing, the file will
47、 be created if the file does nt exist7 f.write(test) # write text to file8f.close() # close the file119f = file(test.txt) # if no mode is specified, the default mode is reado nly.1310 while True:11line = f.readli ne()12if len (li ne) = 0:# zero len gth in dicates the EOF of the file13break14prin t l
48、i ne,1915 f.close()2. 存储器python提供一个标准的模块,成为pickle,使用它可以在一个文件中存储任何python对象,之后可以完整的取出来,这被称为持久地存储对象;还有另外一个模块成为cPickle,它的功能和pickle完全一样,只不过它是用 c写的,要比pickle速度快(大约快1000 倍)。import cPickledatafile = data.datan amelist = peter, joh n, k in g f = file(datafile, w) cPickle.dump( namelist, f) f.close() del n ame
49、list f = file(datafile)stored namelist = cPickleoad(f)print stored namelist#peter, joh n, ki ng九、异常当程序中出现某些异常的状况时,异常就发生了。python中可以使用try . except处理。try:print 1/0except ZeroDivisi on Error, e:print eexcept:prin t error or excepti on occurred.#in teger divisio n or modulo by zero可以让try . except关联上一个els
50、e,当没有异常时则执行else。我们可以定义自己的异常类,需要继承Error或Exception。class Shortin putExceptio n( Excepti on):A user-defi ned excepti on classdef _init_(self, le ngth, atleast):Exception._init_(self)selfen gth = len gthself.atleast = atleasttry:s = raw_in put(e nter somet in g-)if len (s) 3:raise Short in putExcepti on
51、 (le n( s), 3)except EOFError:prin t why you in put an EOF?except Short in putExcepti on, ex:prin t The len ght of in put is %d, was expect ing at the least %d % (ex .len gth, ex.atleast)else:print no excepti on#The len ght of in put is 1, was expect ing at the least 3try.fi nallytry:f = file(test.t
52、xt)while True:li ne = f.readli ne()if len (I ine) = 0:breaktime.sleep(2)print line,fin ally:f.close()prin t Clea ning up.十、Python标准库Python标准库是随Pthon附带安装的,包含了大量极其有用的模块。1. sys模块sys模块包含系统对应的功能sys.argv-包含命令行参数,第一个参数是py的文件名sys.platform -返回平台类型sys.exit(status) -退出程序,可选的status(范围:0-127): 0表示正常退出,其他表示不正常,可抛
53、异常事件供捕获sys.path-程序中导入模块对应的文件必须放在sys.path包含的目录中,使用sys.modules -This is a dictio nary that maps module n ames to modules which have already bee n loaded sys.stdin,sys.stdout,sys.stderr-包含与标准 I/O 流对应的流对象s =2. os模块该模块包含普遍的操作系统功能字符串指示你正在使用的平台。比如对于Windows,它是nt,而对于Linux/Unix用户,它是posixos.getcwd()函数得到
54、当前工作目录,即当前 Python脚本工作的目录路径os.getenv()和os.putenv()函数分别用来读取和设置环境变量os.listdir()返回指定目录下的所有文件和目录名os.remove()函数用来删除一个文件os.system()函数用来运行shell命令os.linesep字符串给出当前平台使用的行终止符。例如, Windows使用rn, Linux使用n而Mac使用ros.sep操作系统特定的路径分割符十一、其他1. 一些特殊的方法名称 说明_ini t_(self,.)这个方法在新建对象恰好要被返回使用之前被调用。_de(self)恰好在对象要被删除之前调用。_str_
55、(self)在我们对对象使用print语句或是使用str()的时候调用。t_(self,other)当使用 小于运算符( 等等)都有特殊的方法。_getitem_(self,key)使用xkey索引操作符的时候调用。_len_(self)对序列对象使用内建的len()函数的时候调用。下面的类中定义了上表中的方法:class Array:_list =def _init_(self):prin t c on structordef _del_(self):prin t destructordef _str_(self):retur n this self-defi ned array class
56、def _getitem_(self, key):return self._listkeydef _len_(self):return len(self._list)def Add(self, value):self._list.appe nd(value)def Remove(self, in dex):del self._listi ndexdef Displayltems(self):prin t show all items-for item in self._list:print itemarr = Array()#con structorprint arr#this self-de
57、fi ned array classprin t le n(arr)#0arr.Add(1)arr.Add(2)arr.Add(3)prin t le n(arr)#3print arr0 #1arr.Displayltems()#show all items#1#2#3arr.Remove(1)arr.DisplayItems()#show all items#1#3#destructor2. 综合列表通过列表综合,可以从一个已有的列表导出一个新的列表。list1 = 1,2, 3, 4, 5list2 = i*2 for i in list1 if i 3prin t list1#1,2,
58、 3, 4, 5prin t list2#8, 103. 函数接收元组/列表/字典当函数接收元组或字典形式的参数的时候,有一种特殊的方法,使用*和*前缀。该方法在函数需要获取可变数量的参数的时候特别有用。由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是*前缀,多余的参数则会被认为是一个字典的键/值对。def powersum(power, *args):total = 0for i in args:total += pow(i, power)return totalprint powersum(2, 1,2, 3)#14def displaydic
59、(*args):lambda需要一个参数,后面仅跟单个表达式作Python 表for key,value in args.items():prin t key:%s;value:%s % (key, value)displaydic(a=on e, b=two, c=three)#key:a;value: one#key:c;value:three#key:b;value:two4. lambdalambda语句被用来创建新的函数对象,并在运行时返回它们。为函数体,而表达式的值被这个 新建的函数返回。 注意,即便是print语句也不能用在lambda形式中,只能使用表达式。func = lam
60、bda s: s * 3print fun c(peter ) #peter peter peterfunc2 = lambda a, b: a * bprint fun c2(2, 3)#65. exec/evalexec语句用来执行储存在字符串或文件中的Python语句;eval语句用来计算存储在字符串中的有效达式。cmd = pri nt hello worldexec cmd #hello worldexpression = 10 * 2 + 5print eval(expressi on)#256. assertassert语句用来断言某个条件是真的,并且在它非真的时候引发一个错误-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能运维系统实施方案
- 钢结构安装团队协调管理方案
- 虚拟化平台部署与管理方案
- 生产线自动化改造与提升方案
- xx市文化中心建设项目风险评估报告
- 城区道路破损修复与养护项目实施
- 全国推广项目协议书
- 充电桩充电容量配置方案
- 2025年农产品包装设计服务协议
- 2025年内容创作者激励合同协议(平台)
- 大学生职业生涯规划
- JGJ142-2012 辐射供暖供冷技术规程
- 基础医学人体解剖学鼻腔鼻旁窦和蝶鞍区应用解剖
- 毛绒玩具验货报告 格式
- SB/T 10744-2012螺旋卷边式散装水泥钢板筒仓
- GB/T 7251.3-2017低压成套开关设备和控制设备第3部分:由一般人员操作的配电板(DBO)
- GB/T 24923-2010普通型阀门电动装置技术条件
- FZ/T 64056-2015洁净室用擦拭布
- 一年级整本书阅读指导策略
- 员工考勤记录表
- APQP-培训教材-新课件
评论
0/150
提交评论