还剩81页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
基础学问Python书目基础学问Python1前言3
一、基础学问4安装
1.14交互式说明器
1.24函数、变量、模块
1.35字符串
1.46
二、列表8序列的操作
2.18列表的基本操作
2.212列表的方法
2.313
三、元组15元组的操作
3.116函数
3.2tuple16
四、字符串16字符串格式化
3.316字符串的方法
3.418
五、字典19函数
5.1diet19的元素包含在分片内,其次个索引的元素不包含在分片内,如:tag=tag[7:21]输出”注取第到第个字符tag[7:21],720若想包含从第一个起先(或直到最终一个结束)的字符串,可以将前一个(或后一个)索引置空,如tag[:5],tag[7:],tag[:]步长分片中的第三个值(起先与结束索引之后)如idx=[l,2,3,4,5,6,7,8,9,10]输出idx[::2][1,3,5,7,9]输出:idx[::-l][10,9,8,7,6,5,4,3,2,1]序列加法两种相同类型的序列才能进行连接操作,如输出[1,2,3]+[4,5,6][1,2,3,4,5,6]输出)hello++world hello_world不同类型序列不能相加,如提示出错[1,2,3]+hello数字与序列相乘后,原序列被重复次x x输出:
[12]*10列表初始化,创建个元素空间但没有值1[None]*10成员资格运算,检查一个值是否在序列中in例1,1users=[taobao\alibaba,^oof],input_name=raw_input Enteryour username:if input_name in users:11print input_name+is inusers!else:print Warning!+input_name+is not inusers!!例2db=[[smith,4309],[jones,092r],,,;,[alber8745],1!username=raw_inputus ername:fpin=raw_inputpin code:if[username,pin]in db:1print Accessgranted!else:1print Warning:username orpin iserror!
2.2列表的基本操作列表与元组的区分列表可以修改,元组不行以修改列表的元素写在方括号中,元素间用逗号隔开,如edward=,[Edward,29/hangzhou]元素赋值如()1x[l]=O删除元素()2names=[Alice,Beth,Earl,Dimdo]del names
[2]结果names=[Alice,Beth,Dimdo]分片赋值()3可以一次为多个元素赋值()name=list perl()name[l:]=list ython结果name=[p,y,t,h,o,n]可以实现插入元素num=[1,5]num[1:1]=[2,3,4]结果num=[1,2,3,4,5]可以实现删除元素num=[1,2,3,4,5]num[2:4]=[]结果num=[1,2,5]
2.3列表的方法1appendnum=[1,2,3]num.append4结果num=[1,2,3,4]2count,x=[to,be,or,not,t be]x.count to结果为23extenda=[1,2,3]b=[4,5,6]a.extendb结果a=[1,2,3,4,5,6]4indexa=[who,am,i,]a.index结果为35insertnum=[1,2,3,4,5]num.insert3,*four*结果num=[1,2,3,four,4,5]移除列表中的一个元素,并且返回该元素的值,如:6pop:x=[1,2,3]返回x.popO3返回x.popl2移除表中某个值7remove:x=[to,be,or,not,to,be]x.removef be结果x=[to,or,not,to,be]将列表中的元素反向存放8reverse:x=[1,2,3]x.reverseQ结果x=[3,2,1]对原列表进行排序,返回值为空9sort:x=[5,1,2,4,3,6]y=x.sort结果x=[1,2,3,4,5,6]无值y函数sortedX=[5,1,2,4,3,6]y=sortedx结果x=[5,1,2,4,3,6]y=[1,2,3,4,5,6]比较函数io cmp返回cmpl,2-1返回cmpl,l返回cmp2,l1
三、元组元组是不行变序列空元组一个值的元组或其中逗号不行省略多个值的元组或1,1,1,2,31,2,3输出#没有逗号,一般的值计算2*2+310输出⑸#有逗号,表示是一个元组,相乘后得到一个新2*2+3,5的元组,有两个值元组的操作
3.1创建元组
1.X=1,2,3访问元组元素
2.输出X[l]2输出X[0:2]1,2函数
3.2tuple输出#列表1,2,3tuple[l,2,3]输出#字符串tuple abcaLbJc输出#元组1,2,3tuplel,2,3将序列转换为元组:
四、字符串字符串是不行变更的,不能对一个字符串重新赋值字符串格式化用%分隔,%左侧放置一个字符串的格式,在%右侧放置
4.1希望格式化的字符串值如str=l,2,3,4,5print%s%s%s%s%s%str输出例12345x=
1.0y=
3.oZ=x/yprint%.5f%z输出字符串宽度、精度、符号、齐
0.33333,%-
10.2f%
3.1415926,%
10.2f%
3.1415926,%+
10.2f%
3.1415926正负数,%+
10.2f%-
3.1415926对齐、填充-表示左对输出,%+-
10.2f1%
3.14-
3.1415926默认右对齐输出
3.14,+表示显示,%+-
10.2f%
3.1415926输出’+
3.141,%
010.2f%
3.1415926输出’-
3.141头不足部分用补全0输出1-
3.14,字符串的方法
4.2输出1+
3.14表示开0在母串中查找子串,找到后返回索引值,找不到返回
1.find:-L连接字符串列表如
2.join:str=[1,2,3],,sep=+输出sep.joinstr1+2+3,,,dirs=usr,bin,env输出/.joindirs/usr/bin/env返回字符串的小写字母,如
3.lower:输出ABC.lower abc将字符串的全部匹配项都替换,再返回替换后的字符串如:
4.replaced输出I ama student.replacefl Tma student的逆方法,将字符串分割成序列,如
5.split join输出1+2+
3.split+[T,2,3]去除一个字符串的前后空格,再返回去除空格后的字符串
6.stripQ:只处理单个字符,可以同时进行多个替换
7.translatedfrom stringimport maketrans//创建转换表,格式table=maketranscs,kz string.maketransfrom,to输出print table[97:123]abkdefghijklmnopqrztuvwxyz=,str this is anincredible test.translatetable输出print strthiz izan inkredibletezt
五、字典键/值对之间用冒号隔开,项之间用逗号隔开,整个字典用大括号括起来如宁波台州丁杭州phonebook=f T0574L0576,:0571}宁波]输出,,phonebook]0574函数
5.1diet可以运用该函数通过其他映射或键,值对序列建立字典,如items=[name,Alice,age,28]d=dictitems输出字典print d{age28JnamO:Alice或者用关键字参数形式,,d=dictname=Alice age=28输出字典print dfage=28Jname Alice}字典基本操作
5.2与序列类似sequence字典基本操作
5.219字典的格式化字符串
5.320字典的方法
5.420
六、条件、循环和其他语句24模块导入
6.124赋值
6.225语句块
6.326条件语句
6.427循环
6.528列表推导式
6.
七、抽象(函数)32创建函数
7.132文档字符串
7.233参数
7.333作用域
7.439递归
7.540
八、对象43对象的特性
8.143类的创建和特性的私有化
8.243子类与超类
8.345
九、异样47字典:宁波丁台州丁」杭州「}phonebook=f0574J0576T057lenphonebook]宁波]phonebook]绍兴卜//增加一个字典项phonebook0573//删除一个字典项]台州[del phonebook//返回true绍兴in phonebook//返回false,台州in phonebook字典的格式化字符串
5.3%杭州H fhangzhous areanumber iss%phonebook输出“hangzhous areanumber is0571”字典的方法
5.4清除字典中全部项目,如iclearf:{宁波丁「台州杭州丁phonebook=057470576,0571}x=phonebook.clear输出{}print phonebook输出print xNone浅复制,返回一个具有相同键-值对的新字典如2copy:phonebook={riibo:0574,taizhou:‘0576’,f fhangzhou:’0571}x=phonebook.copy//修改,,,x[taizhou]=0576-0576value输出X{nibo:0574,hangzhou:0571,taizhou:0576-0576}输出fphonebook{nibo*:0574\hangzhou:0571,taizhod:‘05761x.clearQ输出{}〃删除字典X输出「;phonebook{‘nibo:0574hangzhou:057taizhou:0576}运用给定的键建立新的字典,键的默认值为3fromkeysf:如None,X={}fy=x.f romkeys[nam eV age*]输出X}输出1y{age:None,name*:None}访问字典中的项,即使项不存在时,也不会出错,如:4get:,,fx={name:Alice*,*age:28}输出print x.getname Alice输出fprint x.get addrNone「输出//键存在,返回对应值printx.getname N/A Alice输出〃自定义默认值为print x.getfaddr,N/A N/A N/A,替换None检查字典中是否包含给出的键,相当于表达式5has_key:k indiet,注不包括这个函数python
3.0输出:x.has_keyname True输出x.has_keyaddr False将字典的全部项以列表方式返回,如6items输出x.itemsf[age,28,name,Alice]将字典的全部关键字以列表方式返回,如7keys:输出「x.keysQ age,name]:将字典的全部值以列表方式返回,如8values values输出x.values[28,Alice]返回对应给定键的值,再将该键值对从原字典中删除,如⑼pop:输出x.popname Alice输出//原来的x{age:28}namd,Alice已被删除弹出字典的项,如:10popitemf:「x={iio.1Jno.2:2,iio.5:5Jno.4:4Jno.3:3}输出:f!x{no.5:5,no.4:4Jno.3:3Jno.2:2,*no.r1}输出x.popitemQ no.5,5输出:;x.popitem no.44输出x{no.31:3Jno.2:2Jno.l:1}与类似,键存在返回对应值,但给定键不11setdefaultO get存在时,返回默认值后更新了字典,如,,f,,x={name:Alice!age:28},输出print x.setdefault nameAlice输出x{age28JnameLAlice}输出1print x.setdefault faddrNone输出x{agd:28,name:Alice,f faddr:None}输出print x.setdefault nameJN/A Alice输出x fage128JnameAlicef faddr:None}输出print x.setdefault addrJN/A None输出x{‘age:!f28,name:Alice addr:None}输出print x.setdefault phone,N/A N/A输出x{phoneLN/AJagd:28JnamQ:Alice,‘addr:None}//用自定义值替换默认值N/A,None可以用一个字典项更新另外一个字典,关键字存12updateQ:在时变更其对应值,关键字不存在时添加新项,如,,f,,x={name:Alice*,age:28},y={age:25,phone:0571-12345}x.updatey输出「,,,x{phone0571-12345age25Jname:,Alice}
六、条件、循环和其他语句模块导入
6.11import module・・・2from moduleimport functionl,function2,3from moduleimport*4import moduleas other_module_name5from moduleimport functionasoth er_function_nam e⑴序列解包values=1,2,3输出values1,2,3中的值赋给对应的变量x,y,z=values//values输出x1输出y2输出z3student={name:Alice,age:28}key,value=student.popitem输出:print key,value age28链式赋值2x=y=student={name:Alice,age:28}⑶增量赋值x=l结果为x+=1X2结果为x*=3x6结果为x/=2x3结果为x%=3x0为str foostr=foo结果为X-=1X-1为=,str+bar,str foobar为1str*=2str loobarfoobar语句块
6.3以冒号标识语句块的起先,块中每个语句缩进相同空格数,当回退到和已经闭合的块一样的缩进量时表示当前语句块已经结束例def maximumx,y:print testfunc_return beginif xy:print x is maximum:・・print testfunc_return end.return xelse:fprint vis maximum:1print testfunc_return end...return yfprintlest func_return end...\nprint maximum2,3条件语句
6.4⑴布尔值布尔值为假的布尔表达式有False None0[]0boolFalse==boolNone==nn==bool0==boolbool==bool[]==bool{}==False语句:2if•••elif•••elsefnum=inputEnter anumber:if num0:print Thenumber ispositive,elif num0:1print Thenumber isnegativeelse:1print Thenumber iszero⑶运算符比较运行符a.表达式表・中的比较运算符51Pythonx—y x等于yxy x小于yxy x大于yx•y X大于等于yx-y x小于等于yx!•y x不等于yx isy x和y是同一个对象x和y是不同的对象x is not yx是y容器(例如,序列)的成员x In yx不是y容器(例如.序列)的成员x not in y布尔运算符、、b.and ornot⑷断言检查某些条件,假如不符合干脆报错,如age=10//出错assert20age100//正常assert0age100assert10age100,The agemust greatthan10Traceback mostrecent calllast:n HFilestdin,line1,in module循环
6.5循环1whilex=lx+=lprint whileend!print nowxis:xHname=while notname:f!name=raw_input Pleaseenter yourname:print Myname is%s!%name循环⑵for例1:「「words=rAlice TomJonLSam1for wordin words:print wordprint for end!*例2phonebook={nibo:0574taizhou:0576,hangzhou:057r}for keyin phonebook:print key,phonebook[key]输出nibo0574hangzhou0571内建异样类
9.147自定义异样类
9.247捕获异样
9.347
十、魔法方法、属性、迭代器49」构造方法149重写
10.250属性
10.352静态方法与类成员方法
10.455迭代器
10.556
十一、模块和包58模块的导入1L158包
11.260标准库
11.365前言什么是python官方说明一种说明型的、面对对象的、带有动态语义的高级程序设计语宣优点简洁、强大,程序员在编程时能够保持自己的风格,简洁实现自己想要的功能,程序清晰易懂历史在世纪年头初创建了这门语言Guido vanRossum2090taizhou0576例3:for key,value inphonebook.itemsf:print key,value例4:names=[AliceJTomJJorT JSam1ages=[20,25,23,25],,print names_ages=names_agesnames_ages=zipnames,agesfor iin rangelennames:print ij;name:\names[i],age:\ages[i]print Jumpout for statement!now iis:\iprint\rTfor name,age innames_ages:;print nameJis agejyears old,print输出;names_ages=[Alice20,Tom,25,Jon,23,;Sam25]0;name:Alice;age:201;name:Tom;age:252;name:Jon;age:233;name:Sam;age:25jump outforstatement!now iis:3Alice is20years oldTomis25years oldJonis23years oldSamis25yearsold跳出循环3break,continue列表推导式
6.6利用其他列表创建新列表的一种方法其工作方式类似于循环for[x*x forx in rangelO]输出1,4,9,16,25,36,49,64,81][x*x forx in rangelO ifx%3==0]输出[0,9,36,81][x,y forx inrange3for yinrange3]输出[0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,12,,2]
6.7pass/del/exec/eval什么也不做,可作为占位符运用pass:删除变量,但不能删除值,如del:x=l,delx执行一个语句,如exec:python execprint hello计算表达式的值并返回结果,如eval:evalraw_inputenterexpression:
七、函数创建函数
7.1def function_nameargl•••例1:def fibs num:result=[0,1]for iin rangenum-2:result.appendresult[-2]+result[-l]return resultx=fibs10print x输出[0,1,1,2,3,5,8,13,21,34]文档字符串
7.2写在函数开头的字符串,如def squarex:Calculates thesquare ofthe numberx.return x*x访问文档字符串一function_name.doc—输出print square.—doc—Calculates thesquare ofthe numberx.参数
7.3数字、字符串、元组作为形参1数字、字符串、元组是不行变的,即无法被修改只能用新的值覆盖,所以用它们作形参时,在函数内部变更了参数变量的值,不会影响函数外部该变量的值如def changen:n=10print in changen,n=\nn=20changenprint*out changen,n=\n输出in changen,n=10out changen,n=20列表作为形参2同时引用一个列表a.列表本身是可变的数据结构,将其作为形参,在函数内部变更该列表中的元素修改元素值,或增加新元素后,会影响函数外部该列表的元素值如listl:重新指定新的列表b.假如重新指定新的列表时,不会变更原来的列表值如list2:def change_listlist1,list2:listl[O]=in_listlist
1.appendadd newlist2=[4,5,6]print in change_listlistl,list2,list1=%s,list2=%s%listl,list2list1=[out_list,world]list2=[1,2,3]change_listlist1,list2print out change_listlist1,list2,listl=%s,list2=%s%listl,list2输出」inchange_listlist1,list2,list worldf1add new]Jist2=[4,5,6]out change_listlist1,list2,*world,,fadd new]Jist2=[l,2,3].用分片引用列表的一个复本作为形参Cdef change_list_sliceinglist:list[O]=in_listflist.append addnewprint inchange_list_sliceinglist,flist=%s%list1list=[out_lisf/world]change_lis t_slic einglist[:],print outchange_list_sliceinglist,list=%s%list输出,,inchange_list_sliceinglist,list=[in_list,;world addnew],,outchange_list_sliceinglist,list=[out_list,World]关键字参数、默认值3之前用到的参数都是位置参数,没有给形式参数干脆赋值,在函数调用时形参与实参的位置要一一对应;若运用关键字参数,即函数的形式参数已被干脆赋值,那么多个形参位置弄乱了依次也不影响,如f1111def hello_worldstr1=world,str2=!,str3=Hello:print,%s%s%s%str3,strl,str2strl=Tomstr2=fstr3=Hrhello_worldhello_worldstr1h ello_world str2hello_worldstr1,str2hello_worldstr1,str2,str3输出Hello world!Hello Tom!!Hello…Hello Tom...HI Tom...收集参数
4.将多个参数收集在一起,组成元组,如adef print_paramseg,*str:print eg,print str=strprint_paramseg:JNiceJtoJmeetJyouJ!’,123输出egstr=NiceJtoJmeetJyou T,
123.将多个参数收集在一起,组成字典,如bdef print_params_1**str:print strprint_params_1x=1,y=2,z=3输出{y:2,x:1,z:3}.混合运用,如cdef print_params_2x y z=3*strl**str2:,print x,y,zprint strlprint str2=,print_params_21,2,8/a\b=O,par1foo\输出,,par2=bar128a,{b:0,par2LbarVpaiT:¥001反转过程5收集参数的反转过程,即参数是一个元组或字典,在函数中拆分了运用,如def addx,yz=100:,return x+y+zparams=l2sum=add*paramsprint sum输出103def link**strs:,,,return name:+strs[name]+7+age:+strs[age]+1f+addr:+strs[addr]strs={name:JohnJage:‘27’Jaddr:hangzhou}p=link**strsprint p输出name:John;age:27;addr:hangzhou作用域
7.4全局变量名与局部变量名相同时,在函数内部访问全局变量时,须要a.用函数,如globalsdef local_globalstr:=,・・str haha.1print str+globalsOIstr]=,1str Hello world!local_globalstr输出haha...Hello world!重绑定全局变量b.X=1y=idef local_global_2y:global xx=x+ly=y+ilocal_global_2y
一、基础学问
1.1安装运用包管理器安装如通过安装;
1.python,yum从源文件编译安装
2.python下载源代码;下载扩展名为的文件保存到本地某一书目下;()
1.tgz⑵进入该书目,运用对文件解压缩;tar-xzvf python-进入已解压的文件书目,运行以下叮嘱()3()./configure—prefix=$pwdmakemake install将当前文件夹路径放到环境变量中()4PYTH在脚本首行写上后,不管二python“#!/usr/bin/env python”python进制文件在哪里,程序都会自动执行若系统中安装了新版本的同时旧版本照旧存在,那么应当干脆指python,明新版本路径,如#!/usr/bin/python
2.
61.2交互式说明器安装了并设置了环境变量后,输入进入交互式说明器python python在交互式说明器中可以干脆计算出表达式的值,如输入后按回车,输出1+12输入输出(因为计算结果的小数部分被截除了)1/2,,print x=xprint~=’,y输出x=2y=i递归
7.51n!=n*n-1*n-2*…*2*1def factorialn:if n==l:return1else:return n*factorialn-ln=10y=factorialnprint%s!=%s%ny输出10!=3628800⑵二分查找法def searchseq num,lower,upper:if lower==upper:if num==s eq[upper]:return upperelse:return-1elif lowerupper:return-1else:mid=lower+upper//2if numseq[mid]:return searchfseq,num,mid+1,upperelse:return searchseqnum,lower,middef find_idxx seq:for iin rangelenfseq:ifx==seq[i]:,print find%s in seq%s.index=%s%x,seq,ibreakif ilenseq:fprint,%s is not in seq%s%x,seqseq=[1,12,121,90,132,0,77]num=100num2=77seq_2=seq[:]seq_
2.sortlower=0upper=lenseq-1,,print seq=%snum=%s%seq,num,y=s earch seq_2,num,lower,upperz=searchseq_2,num2,lower,upperprint y=,yprint z=\zif y0:!print%s is notinseq%s%num,seqelse:find_idxseq_2[y],seqif z0:!print%sis notinseq%s%num2,seq else:find_idxseq_2[z],seq输出seq=[l,12,121,90,132,0,77],num=100y=-1z=3([])100isnotinseql,12,121,90,132,0,77([])find77inseql12,121,90,132,0,
77.index=6
八、对象对象的特性
8.1对象的特性多态、封装、继承对象包括特性(对象内的变量)和方法(对象内的函数)类代表对象的集合(或一类对象),每个对象(实例)都有一个类多态可以对不同类的对象运用相同的操作,让用户对于不知道是什么类(或对象类型)的对象进行方法调用,通常用参数个数不同或参数类型不同来区分如J1+2=3hello+world=helloworld封装对外部世界隐藏对象的工作微小环节,可以不用关切对象是如何构建而干脆进行运用继承以一般的类为基础建立特地的类对象类的创建和特性的私有化
8.2创建类#新式类中的语法,放置在模块或脚_metaclass=type本起先处class person:def setnamefself,name:s elf.nam e=nam edefgetnameself:return self.namedef greetself:nprint Hello,Im%s.%self.namefoo=personbar=personQ1foo.setnamefAlice f!bar.setname Tonnyfoo.greetQbar.greet输出Hello,Im Alice.Hello,Im Tonny.中方法或特性私有化在其名字前加上双下划线,私有化后的方法Python外部无法干脆访问,但可以在类内部运用,如class secretive:def_inaccessibleself:Hprint Youcant seeme...”def accessibleself:Hprint Youcan seeme...”self.—inaccessibleQs=secretivef#运行出错,在类对象外部不能干脆访问s.—inaccessible#输出两行s.accessibleQ Youcan seeme...You cantseeme...子类与超类
8.3将超类类名写在子类语句后的圆括号内如classclass studentperson:def setagefself,age:self.age=agedef get_name_ageself:Hprint Hello,my nameis%s and my age is%s%self.name,self.age1stu=student stuesetnameCJonn,,stu.setage24・stu get_name_age输出:Hello,my nameis Jonnand my age is24想要查看一个类是否是另一个类的子类,可以运用内建函数如:#输出issubclass,print issubclassstudent,person True#输出想要检查一个对象是print issubclasspersonstudent False,否是一个类的实例,可以运用内建函数如:isinstanec,print isinstancestustudent printisinstancestudentstu#输出True参数必需是一个class#运行时出错,提示其次个查看一个对象属于哪个类,可以用如下语句:#输出print stu.—class class1main.student#输出(〈print student.—bases class查看一个已知类的基类:〉,main—.person查看一个对象内全部存储的值print stu.—diet
九、异样内建异样类
9.1#输出{age:24Jname:Jonn}表・一些内建异常81〕描述类名所有异常的基类Exception特性引用或赋值失败时引发AttrlbuteError试图打开不存在文件(包括其他情况)时引发lOError IndexError在使用序列中不存在的索引时引发KeyErrorNameError在使用映射中不存在的键时引发SyntaxError在找不到名字(变量)时引发TypeError在代码为错误形式时引发ValueError在内建操作或者函数应用于错误类型的对象时引发ZeroDivisionError在内建操作或者函数应用于正确类型的对象,但是:该对象使用不合适的值时引发在除法或者模除操作的第二个参数为0时引发自定义异样类
9.2需从类或其子类继承,如:Exception・・・class myExceptionException:捕获异样
9.3捕获单个异样1运用实现如try/except tryf,x=input*Enter the first number:y=input Enter the secondnumber:print x/yexcept ZeroDivisionError:print The second number cant be zero!”捕获多个异样,并访问异样本身:()2try,fx=input Enterthe first number:,y=input Enterthe second number:print x/y#多个异except ZeroDivisionError,NameError,e:样类型写成一个元组Hprint Thesecondnumbercant bezero!print e输入1a输出:Thesecondnumbercantbezero!fname aisnotdefined捕获全部异样在子句中忽视全部异样类,如()3excepttry:fx=input*Enterthefirstnumber:,fy=input Enterthe secondnumber:print x/yexcept:print Error!”子句与子句4else finallywhileTrue:try:,x=input Enterthefirstnumber:*,fy=input Enterthe secondnumber:print x/yexcept:print”Error!”#直到两数都正else:常时才退出break#每次都会执行finally:1print*Well done!
十、魔法方法、属性、迭代器在方法名字的前面和后面加上双下划线表示特殊的方法在中,python由这个特殊名字组成的集合所包含的方法称为魔法方法构造方法
10.1,在一个对象被创建后立刻调用构造方法—initclass foobar:def—init_self:输入输出.1/
21.0/2,5输入输出输入输出//双斜线表示进行1//2,0;
1.0//
2.0,
0.0整除[feiyao@qal9-vml hive1$pythonPython
2.
6.40264:75706,Mar282011,16:21:24[GCC
4.
1.220071124Red Hat
4.
1.2-42]on linux2Type help]“copyright[“credits”or licensefor moreinformation.»1+12»1/20»
1.0/
20.5»
1.0//
20.0»13函数、变量、模块内建函数:运用函数接收输入值,如输入贝input inputx=input,12,lj x=12⑵pow3=8abs-10=10四舍五入了round
1.8/2=
1.0,模块向下取整1math,floor
1.8/2=
0.0,函数不能干脆用,要先加载模块floor mathimport mathimportmathintfmath.floor
32.9输出32,,self.var=hellodef get_varself:return self.varf=foobarnprint f.get_var=%s%f.get_varnprint f.var=%s”%f.var输出f.get_var=hellof.var=hello重写
10.2对象具体有继承机制,在继承时,子类可能会重写超类中已存在的方法对于构造函数,假如要重写,需调用超类中的构造方法,否则对象可能不会被正确初始化,实例如下class new_foobarfoobar:def—init_self,x,y:self.x=xself.y=ydef diviself:return self.x/self.yt=new_foobar10,5的子类的构造函数n Hprint x/y=%s%t.divif#x,y中初始化,输出x/y=2#运行出错Hprint t.get_var=%s%t.get_var#运行出错Hprint t.var=%s%t.var在子类的构造函数中添加超类的构造函数:1new.foobarclass new_foobarfoobar:def—init_self,x,y:foobar.—init—selfself.x=xself.y=yHprint t.get_var=%s%t.get_varprint t.var=%s%t.var输出t.get_var=hellot.var=hello运用函数需指定为新式的类2super—metaclass—=typeclass new2_foobarfoobar:def—init—self,x,y:supernew2_foobar self.—init—,self.x=xself.y=ydef diviself:return self.x/self.yt2=new2_foobar100,10#输出printx/y=%s%t
2.divi x/y=10#输出Hprint t
2.get_var=%s”%t
2.get_var t
2.get_var=hello#输出nprint t
2.var=%s”%t
2.vart
2.var=hello属性
10.3干脆调用成员函数1class rectangle:def—init_self:self.width=0self.height=0def setsizeself,size:self.width,self.height=sizedef getsizeself:return self.width,self.heightr=rectangler.width=10r.height=5nprint r.width=%s%r.width”「nprint height=%s%r.heightr.getsizef只带一个参数,里面括号不r.setsize150,100#setsize行少,否则运行出错print r.width=%s”%r.widthn Hprint r.height=%s%r.height输出r.width=10r.height=5r.width=150r.height=100运用函数2property—metaclass—=type class rectangle:def—init_self:self.width=0self.height=0def setsizefself,size:self.width,self.height=sizedef getsizeself:return self.width,self.heightsize=propertyfgetsize,setsizer=rectangler.width=10r.height=5Hprint r.width=%s%r.widthnprint”[.height=%s%r.height#括号也可以去掉r.size=150,100nprint r.width=%s”%r.widthHprint”[.height=%s%r.heightHprint r.size=,r.size输出r.width=10r.height=5r.height=100-cQass rectangleclassrectangleI def_init_selfdef_init_self self,width二0self,width=0self,height=0self,height=0def setsize self,size def set sizeself,sizeself,width,self,height=sizeself,width,self,height=sizedef getsizeself:return self,width,self,height size=propertygetsize,setsizer.size=150,100i•二rectangler二rectangle r.width=10r.width=10r.r.height=5height=5print r.width二%s%r.widthprint,zr.width=%s〃%r.width printr.height=%s%r.heightprint z/r.height=%s%r.heightr.size二150,100#括号也可以去掉r.getsizeOr.setsize150,100#setsize只带一个参数,里面括号不可少,print print*r.width=%s〃%r.widthdef getsizeself:z,r.width二%s%r.width print/r.height=%s”%r.heightreturn self,width,self,heightprint z,r.height=%s%r.heightprint r.size=.r.size静态方法与类成员方法
10.4创建类时,静态方法被装入类型的对象中,定义时没有参数,Staticmethod self且能够被类本身干脆调用类成员方法被装入类型的对象中在定义时须要名为Classmethod cis的类似于的参数,可以干脆用类的具体对象调用self—metaclass—=typeclass myclass:@staticmethoddef smethf:1print This is a static method1@classmethod defcmethcls:print Thisis a class method,cismyclass.smethfmy classeth输出ThisisastaticmethodfThis isaclassmethod class_main—.myclass迭代器
10.5一个实现了方法的对象是可迭代的,一个实现了方法的—iter—next对象是迭代器class fibs:def—init_self:self.a=Oself.b=ldef nextself:self.a,self.b=self.b,self.a+self.breturn self.adef—iter—self:return selff=fibsi=lfor f_val inf:if f_val1000:print i=%s;f_val=%s%i,f_valbreaki+=1printf2=fibsfor iinrange20:print i=%s;f
2.next=%s%i,f
2.nexti+=1输出i=17;f val=1597i=0;f
2.next=li=l;f
2.next=li=2;f
2.next=2i=3;f
2.next=3i=4;f
2.next=5i=5;f2,next=8i=6;f
2.next=13i=7;f
2.next=21i=8;f
2.next=34i=9;f
2.next=55i=10;f
2.next=89i=l1;f
2.next=144i=12;f
2.next=233i=13;f
2.next=377i=14;f
2.next=610i=15;f
2.next=987i=16;f
2.next=1597i=17;f
2.next=2584i=18;f
2.next=4181i=19;f
2.next=6765^
一、模块和包H模块的导入
11.1任何程序都可以作为模块导入实例如下python前提书目下有文件/home/feiyao/yehh/own_study/python/import和内容如下fun.py student.py,#fun.py def fibs num:result=[0,1]for iin rangenum-2:result.appendresult[-2]+result[-l]return result#student.pyimport sys—metaclass—=typeclass studentf:def—init_self:uself.name=Hself.age=def set_name_ageself,name,age:self.name=nameself.age=agedef get_name_ageself:Hprint Hello,my nameis%s and my age is%s%self.name,self.age#!/usr/bin/python#import.pyimport syssys.path.app end7hom e/feiyao/yehh/own_study/pyth另外用下面的方式干脆函数,不须要在函数前加上模块2import名了from mathimport floorintfloor
32.9变量可以运用变量来引用函数,即将某个函数赋给一个变量foo=math.sqrtfoo4输出
2.
01.4字符串字符串拼接+1x=Tm x!y=Im y!x+y输出:Im x!Im y!数值转化成字符串
2、与反引号、可将数值转化成字符串str repr会把值转换为合理形式的字符串;str会创建一个字符串,以合法的表达式的形式来表示值repr python1on/import importfunimport student#运行出错,提示未定⑸print fibs5=,fibs fibs义print fibs5=,fun.fibs5#运行出错,提示模块不行调#s=student用s=stud ent.stud ent,fs.set_name_age Tom\29s.get_name_age运行输出:python import.py,fibs5=[0,1,1,2,3]Hello,my nameis Tomandmyageis29包
11.2包是另外一类模块,它能包含其他模块,当模块存储在文件扩展名.py中时包就是模块所在的书目它必需包含一个命名为的文件模init—,py块假如将它作为一般模块导入,文件的内容就是包的内容实例建立一个名为的包,其中包括名为和的模块pag cisfun包的布局:文件/书目描述中PYTHONPATH…/python/import/的书目包总书目…/python/import/pag/pag包代码模(pag pag•••/python/import/pag/_init_.py块)包子模块(pag cis…/python/import/pag/cis/模块书目)包子模块代码pag…/python/import/pag/cis/_init_.py(模块)cis…/python/import/pag/cls/student.py包子模块的子模pag块(模块文件)cis包子模块(pag fun…/python/import/pag/fun/模块书目)包子模块代码pag•••/python/import/pag/fun/_init_.py(模块)fun•••/python/import/pag/fun/fibs.py包子模块的子模pag块(模块:文件)fibs#•••/python/import/imp_pag.py#!/sur/bin/python#import sys#sys.path.append7home/feiyao/yehh/own_study/python/import/pag#指定路径一个模块后,可以运用短名importfrom pag.cis.student importstudentfrom pag.fun.fibs importfibsf=fibs5s=student#假如干脆一个模块后,要运用时需用全名import#f=pag.fun.fibs.fibs5#s=pag.cls.student.student!print fibs5=,f「・s set_name_ageTom29・s get_name_age#•••/python/import/pag/cis/student.pyimport sys—metaclass—=typeclass studentf:def—init_self:Hself.name=Hself.age=defset_name_ageself,name,age:self.name=nameself.age=agedef get_name_ageself:1nprint Hello,my nameis%s andmyageis%s%self.name,self.age#•••/python/import/pag/fun/fibs.py#fibs.pydef fibsnum:result=[0,1]for iin rangenum-2:result.appendresult[-2]+result[-l]return result运行・••/python/import/python imp_pag.py输出fibs5=[0,1,1,2,3]Hello,my nameis Tomandmyageis29说明每个模块下文件_不行省略,若没有,模块会找不到1init.py只运行一次,运行后生成一此时删除后仍可运2init.py init.pyc,init.py行;一个书目时,该书目下的中的内容可用,该书目下3import_init__.py的其他文件模块需额外.py import;一个文件后,没有加载该文件中的函数时,需通过全名来运4import用,如f=pag.fun.fibs.fibs5一个文件或函数时指定路径,可以干脆运用短名文件名或5import函数名,如干脆运用文件名a.from pag.fun importfibsf=fibs.fibs5干脆运用函数名b.from pag.fun.fibs importfibsf=fibs5出错调试说明模块下面没有找不到1ImportError:No modulenamed cisinit.py,模块将模块名当作函2TypeError:module objectisnotcallable数名调用了,如:应改成nprint fibs5=,pag.fun.fibs5pag.fun.fibs.fibs5模块中的函数没有加ff3NameError:name fibsisnotdefined载,如:没有from pag.fun.fibs importfibs标准库
11.3通过该模块可访问到多个和说明器联系紧密的变量⑴sys:python和函数模块中一些重要的函数和变量sys函数/变描述argv命令行参数,包括脚本名称ex1t[arg]退出当前的程序,可选参数为给定的返回值或者错误信息modules映射模块名字到栽入模块的字典path platform查找模块所在目录的目录名列表stdin stdout类似或者的平台标识符sunos5Win32stderr标准输入流----------个类文件file-like对象标准输出流----------个类文件对象标准错误流----------个类文件对象通过该模块可访问到多个和操作系统联系紧密的变量和函数2OS模块中一些重要函数和变量OS函数/变量描述environ对环境变髭进行映射systemCconinand在子中执行操作系统命令shell seppathsep路径中的分隔符1Inesep分隔路径的分隔符urandomn行分隔符’\r,or•XrKn*返回〃字节的加空强随机数据函数⑶通过该模块可以轻松遍历多个文件和流中randomOgetrandbitsn函数描述uniformCa.b便于遍历多个输入流中的行返回当1nput[f11es[.inplacet,backup]]randrange[start].stop,[step]前文件的名称返回当前累计的行filenameO linenoOfllellnenoOchoiceseq shuffleseq[random]t数返回当前文件的行数1sf1rstl1ne】samp eseq.n检查当前行是否是文件的第一行检isstdlnO有最后一行是否来自关闭nextfl ledsys.stdin当前文件,移动到下一个文件关闭closeO序列的全部行file!nput模块中重要的函数集合、堆、双端队列供应了个有用的数据结构43sets,heapq,deque通过该模块可以获得当前时间,并可进行时间日期操作和格式化⑸time:日期元组的字段含义Python索引字段值0年比如2000,2001,等等1月范围1~122日范围卜313时范围6*234分范围“595秒范围6周当周一为时,范围”7像历日范围1~3668夏令时
0.
1、或-1通过该模块中的函数可以产生随机数、从序列中选取随6random:机元素以与打乱列表元素random模块中的一些重要函数返回〃之间的随机实数〃,其中力O4V1ov以长整型形式返回个随机位n返回随机实数〃,其中万Vb返回中的随机数rangestart.stop,step从序列中返回随意元素seq原地指定序列seq从序列中选择个随机且独立的元素seqn通过该模块可以创建持续性映射,同时将映射的内容保存在给定⑺shelve:文件名的数据库中支持正则表达式的模块8re:模块中一些重要的函数re5m~5cofnp11epattern[,flags]根据包含正则表达式的字符串创建模式对象searchpattern,strlngt.flags]在字符串中寻找模式matchpattern,stringt,flags]在字符串的开始处匹配模式splitpattern,stringt,maxspl1t«0]根据模式的匹配项来分割字符串flnoa1pattern,string subCpat,repl.列出字符串中模式的所有匹配项将字符串中]string],count escapestring所有的匹配项用替换将字符串中所pat repl有特殊正则表达式字符转义匹配对象的重要方法re方法描述group[groupl....]获取给定子模式组的匹配项start[group]返回给定组的匹配项的开始位置end[group]返回给定组的匹配项的结束位置和分片一样,不包括组的结束位置返span[group]回一个组的开始和结束位置⑼其它标准模块:functools,diff lib,hashlib,csv,timeit,profile,trace,datetime,等itertools,logging,getopt,optparse,cmd如输出:H Hprintstr Hello world!Helloworld!输出n1print reprHelloworld!Helloworld!,反引号.中已不再运用反引号,建议用python3repr可以将数字与字母连接在一起,如temp=42输出Hprint“temp is:+temp temp is:
42、输出print temp+and+12342andl23运用用或repr str输出H nprint tempis:+reprtemp tempis:42输出:K Hf,print tempis:+reprtemp+str123tempis:42123多行字符串3长字符串跨多行时,用三个单引号或三个双引号,这样在字符串中可以同时运用单引号和双引号一般字符串跨多行时,也可在行尾用反斜线\,如print Hello,\how areyou”输出:Hello,how areyou原始字符串4输出原始字符串时字符串前面带,如r输出f fprintr C:\programe\new C:\programe\new输出H HprintrC:\new letsgo!C:\new lefsgo!
二、列表中最基本的数据结构是序列序列中每个元素被支配Python sequence,一个序号——即元素的位置,也称为索引,第一个索引是最终一个元0,素索引标记为-1中包含种内建序列Python6列表、元组、字符串、字符串、对象、对象unicode bufferxrange
2.1序列的操作全部序列类型都可以进行的特定操作如下索引indexing分片sliceing力口adding乘multiplying成员资格检查某个元素是否属于序列
2.
1.
1.1索引序列中全部元素都是有编号的,从起先递增元素可以通过编号进入访问实例#!/usr/bin/python monthsf;;[UanYFeb7MarYAprYMay JunYJurAugYSept7Oct7NovYD ec]「;endings=stJndJrd]+17*[W]+[st nd:rd]+7*[th1+Hyear=raw_input year:H nmonth=raw_input month:H nday=raw_input day:month_num=intmonthday_num=intday#索弓month_name=months[month_num-1]I#索引day_ord=day+endings[day_num-1]print month_name++day_ord++year输入year:2023month:12day:21输出Dec21st2023运用索引可以访问单个元素,运用分片可以访问确定范围内的元素分片须要供应两个索引作为边界,用冒号分隔两个索引,第个索引1。