python基础知识(实用)_第1页
python基础知识(实用)_第2页
python基础知识(实用)_第3页
python基础知识(实用)_第4页
python基础知识(实用)_第5页
已阅读5页,还剩29页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

python基础知识(实用)python基础知识(实用)python基础知识(实用)python基础知识(实用)编制仅供参考审核批准生效日期地址:电话:传真:邮编:Python基础知识目录Python基础知识 1前言: 2一、 基础知识 2 安装 2 交互式解释器 3 函数、变量、模块 3 字符串 4二、 列表 5 序列的操作 5 列表的基本操作 7 列表的方法 8三、 元组 9元组的操作 9tuple函数 9四、 字符串 9字符串格式化 10字符串的方法 10五、 字典 11dict()函数 11字典基本操作 11字典的格式化字符串 11字典的方法 12六、 条件、循环和其他语句 13模块导入 13赋值 14语句块 14条件语句 15循环 16列表推导式 17pass/del/exec/eval 18七、 抽象(函数) 18创建函数 18文档字符串 18参数 18作用域 21递归 22八、 对象 23对象的特性 23类的创建和特性的私有化 24子类与超类 25九、 异常 26内建异常类 26自定义异常类 26捕捉异常 26十、 魔法方法、属性、迭代器 27构造方法 27重写 28属性 29静态方法与类成员方法 30迭代器 31十一、 模块和包 32模块的导入 32包 33标准库 35前言:什么是python:官方解释:一种解释型的、面向对象的、带有动态语义的高级程序设计语言。优点:简单、强大,程序员在编程时能够保持自己的风格,容易实现自己想要的功能,程序清晰易懂。历史:GuidovanRossum在20世纪90年代初创造了这门语言。基础知识安装使用包管理器安装python,如通过yum安装;从源文件编译安装python:下载源代码;下载扩展名为.tgz的文件保存到本地某一目录下;进入该目录,使用tar–xzvf对文件解压缩;进入已解压的文件目录,cd运行以下命令:./configure--prefix=$(pwd)makemakeinstall将当前文件夹路径放到环境变量PYTH中。在python脚本首行写上“#!/usr/bin/envpython”后,不管python二进制文件在哪里,程序都会自动执行。若系统中安装了新版本的python,同时旧版本仍然存在,那么应该直接指明新版本路径,如:#!/usr/bin/交互式解释器安装了python并设置了环境变量后,输入python进入交互式解释器。在交互式解释器中可以直接计算出表达式的值,如输入1+1后按回车,输出2输入1/2,输出0(因为计算结果的小数部分被截除了)输入1/2,输出输入1创建元组:X=1,2,32.访问元组元素:X[1]输出:2X[0:2]输出:(1,2)tuple函数将序列转换为元组:tuple([1,2,3])输出(1,2,3)#列表tuple(‘abc’)输出('a','b','c')#字符串tuple((1,2,3))输出(1,2,3)#元组字符串字符串是不可改变的,不能对一个字符串重新赋值。字符串格式化用%分隔,%左侧放置一个字符串的格式,在%右侧放置希望格式化的字符串值。如:str=(1,2,3,4,5)print"%s%s%s%s%s"%str输出:12345例:x=y=z=x/yprint"%.5f"%z输出:字符串宽度、精度、符号、对齐、0填充:'%'%输出:''-表示左对齐'%'%输出:''默认右对齐'%+'%输出:'+'+表示显示正负数'%+'%输出:'''%+'%输出:'''%+'%输出:'+''%'%输出:''0表示开头不足部分用0补全字符串的方法find():在母串中查找子串,找到后返回索引值,找不到返回-1.join():连接字符串列表:如str=[‘1’,‘2’,‘3’]sep=‘+’(str)输出:’1+2+3’dirs=‘’,’usr’,‘bin’,‘env’‘/’.join(dirs)输出:’/usr/bin/env’lower():返回字符串的小写字母,如:‘ABC’.lower()输出:’abc’replace():将字符串的所有匹配项都替换,再返回替换后的字符串。如:'Iamastudent'.replace('Iam','I\'m')输出:"I'mastudent"split():join的逆方法,将字符串分割成序列,如:’1+2+3’.split(‘+’)输出:['1','2','3']strip():去除一个字符串的前后空格,再返回去除空格后的字符串。translate():只处理单个字符,可以同时进行多个替换。fromstringimportmaketranstable=maketrans('cs','kz')maketrans(from,to)printtable[97:123]输出:abkdefghijklmnopqrztuvwxyzstr='thisisanincredibletest'.translate(table)printstr输出:thizizaninkredibletezt字典键/值对之间用冒号隔开,项之间用逗号隔开,整个字典用大括号括起来。如:phonebook={'宁波':'0574','台州':'0576','杭州':'0571'}phonebook['宁波']输出:'0574'dict()函数可以使用该函数通过其他映射或(键,值)对序列建立字典,如:items=[('name','Alice'),('age',28)]d=dict(items)printd输出字典:{'age':28,'name':'Alice'}或者用关键字参数形式d=dict(name='Alice',age=28)printd输出字典:{'age':28,'name':'Alice'}字典基本操作与序列(sequence)类似。字典:phonebook={'宁波':'0574','台州':'0576','杭州':'0571'}len(phonebook)phonebook['宁波']phonebook['绍兴']='0573'setdefault('name')输出:Alicex输出:{'age':28,'name':'Alice'}printx.setdefault('addr')输出:Nonex输出:{'age':28,'name':'Alice','addr':None}printx.setdefault('name','N/A')输出:Alicex输出:{'age':28,'name':'Alice','addr':None}printx.setdefault('addr','N/A')输出:Nonex输出:{'age':28,'name':'Alice','addr':None}printx.setdefault('phone','N/A')输出:N/Ax输出:{'phone':'N/A','age':28,'name':'Alice','addr':None}.'ifx>y:print'xismaximum:'print'testfunc_returnend...'returnxelse:print'yismaximum:'print'testfunc_returnend...'returnyprint'testfunc_returnend...\n'printmaximum(2,3)print'\n'条件语句布尔值布尔值为假的布尔表达式有:FalseNone0‘’“”()[]{}bool(False)==bool(None)==bool(0)==bool("")==bool(())==bool([])==bool({})==Falseif…elif…else语句:num=input('Enteranumber:')ifnum>0:print'Thenumberispositive'elifnum<0:print'Thenumberisnegative'else:print'Thenumberiszero'运算符:比较运行符布尔运算符:and、or、not断言:检查某些条件,如果不符合直接报错,如:age=10assert20<age<100returnx*x访问文档字符串:function_name.__doc__print输出:Calculatesthesquareofthenumberx.参数数字、字符串、元组作为形参:数字、字符串、元组是不可变的,即无法被修改(只能用新的值覆盖),所以用它们作形参时,在函数内部改变了参数(变量)的值,不会影响函数外部该变量的值。如:defchange(n):n=10print'inchange(n),n=',nn=20change(n)print'outchange(n),n=',n输出:inchange(n),n=10outchange(n),n=20列表作为形参:同时引用一个列表:列表本身是可变的数据结构,将其作为形参,在函数内部改变该列表中的元素(修改元素值,或增加新元素)后,会影响函数外部该列表的元素值。如list1:重新指定新的列表如果重新指定新的列表时,不会改变原来的列表值。如list2:defchange_list(list1,list2):list1[0]='in_list'('addnew')list2=[4,5,6]print'inchange_list(list1,list2),list1=%s,list2=%s'%(list1,list2)list1=['out_list','world']list2=[1,2,3]change_list(list1,list2)print'outchange_list(list1,list2),list1=%s,list2=%s'%(list1,list2)输出:inchange_list(list1,list2),list1=['in_list','world','addnew'],list2=[4,5,6]outchange_list(list1,list2),list1=['in_list','world','addnew'],list2=[1,2,3]用分片引用列表的一个复本作为形参defchange_list_sliceing(list):list[0]='in_list'('addnew')print'inchange_list_sliceing(list),list=%s'%listlist=['out_list','world']change_list_sliceing(list[:])print'outchange_list_sliceing(list),list=%s'%list输出:inchange_list_sliceing(list),list=['in_list','world','addnew']outchange_list_sliceing(list),list=['out_list','world']关键字参数、默认值之前用到的参数都是位置参数,没有给形式参数直接赋值,在函数调用时形参与实参的位置要一一对应;若使用关键字参数,即:函数的形式参数已被直接赋值,那么多个形参位置弄乱了顺序也不影响,如:defhello_world(str1='world',str2='!',str3='Hello'):print'%s%s%s'%(str3,str1,str2)str1='Tom'str2='...'str3='HI'hello_world()hello_world(str1)hello_world(str2)hello_world(str1,str2)hello_world(str1,str2,str3)输出:Helloworld!HelloTom!Hello...!HelloTom...HITom...收集参数将多个参数收集在一起,组成元组,如:defprint_params(eg,*str):printegprint'str=',strprint_params('eg:','Nice','to','meet','you','!',123)输出:eg:str=('Nice','to','meet','you','!',123)将多个参数收集在一起,组成字典,如:defprint_params_1(**str):printstrprint_params_1(x=1,y=2,z=3)输出:{'y':2,'x':1,'z':3}混合使用,如:defprint_params_2(x,y,z=3,*str1,**str2):printx,y,zprintstr1printstr2print_params_2(1,2,8,'a',b=0,par1='foo',par2='bar')输出:128('a',){'b':0,'par2':'bar','par1':'foo'}反转过程收集参数的反转过程,即:参数是一个元组或字典,在函数中拆分了使用,如:defadd(x,y,z=100):returnx+y+zparams=(1,2)sum=add(*params)printsum输出:103deflink(**strs):return'name:'+strs['name']+';'+'age:'+strs['age']+';'+'addr:'+strs['addr']strs={'name':'John','age':'27','addr':'hangzhou'}p=link(**strs)printp输出:name:John;age:27;addr:hangzhou作用域全局变量名与局部变量名相同时,在函数内部访问全局变量时,需要用globals()函数,如:deflocal_global(str):str='haha...'printstr+globals()['str']str='Helloworld!'local_global(str)输出:haha...Helloworld!重绑定全局变量x=1y=1deflocal_global_2(y):globalxx=x+1y=y+1local_global_2(y)print'x=',xprint'y=',y输出:x=2y=1递归n!=n*(n-1)*(n-2)*…*2*1deffactorial(n):ifn==1:return1else:returnn*factorial(n-1)n=10y=factorial(n)print'%s!=%s'%(n,y)输出:10!=3628800二分查找法:defsearch(seq,num,lower,upper):iflower==upper:ifnum==seq[upper]:returnupperelse:return-1eliflower>upper:return-1else:mid=(lower+upper)index=%s'%(x,seq,i)breakifi>len(seq):print'%sisnotinseq(%s)'%(x,seq)seq=[1,12,121,90,132,0,77]num=100num2=77seq_2=seq[:]()lower=0upper=len(seq)-1print'seq=%s,num=%s'%(seq,num)y=search(seq_2,num,lower,upper)z=search(seq_2,num2,lower,upper)print'y=',yprint'z=',zify<0:print'%sisnotinseq(%s)'%(num,seq)else:find_idx(seq_2[y],seq)ifz<0:print'%sisnotinseq(%s)'%(num2,seq)else:find_idx(seq_2[z],seq)输出:seq=[1,12,121,90,132,0,77],num=100y=-1z=3100isnotinseq([1,12,121,90,132,0,77])find77inseq([1,12,121,90,132,0,77]).index=6对象对象的特性对象的特性:多态、封装、继承对象:包括特性(对象内的变量)和方法(对象内的函数)。类:代表对象的集合(或一类对象),每个对象(实例)都有一个类。多态:可以对不同类的对象使用相同的操作,让用户对于不知道是什么类(或对象类型)的对象进行方法调用,通常用参数个数不同或参数类型不同来区别。如:1+2=3‘hello’+‘world’=’helloworld’封装:对外部世界隐藏对象的工作细节,可以不用关心对象是如何构建而直接进行使用。继承:以普通的类为基础建立专门的类对象。类的创建和特性的私有化创建类:__metaclass__=type#新式类中的语法,放置在模块或脚本开始处classperson:defsetname(self,name):=namedefgetname(self):returndefgreet(self):print"Hello,I'm%s."%foo=person()bar=person()('Alice')('Tonny')()()输出:Hello,I'mAlice.Hello,I'mTonny.Python中方法或特性私有化:在其名字前加上双下划线,私有化后的方法外部无法直接访问,但可以在类内部使用,如:classsecretive:def__inaccessible(self):print"Youcan'tseeme..."defaccessible(self):print"Youcanseeme..."()s=secretive()()#运行出错,在类对象外部不能直接访问()#输出两行:Youcanseeme...Youcan'tseeme...子类与超类将超类类名写在子类class语句后的圆括号内。如:classstudent(person):defsetage(self,age):=agedefget_name_age(self):print"Hello,mynameis%sandmyageis%s"%,stu=student()('Jonn')('24')()输出:Hello,mynameisJonnandmyageis24想要查看一个类是否是另一个类的子类,可以使用内建函数issubclass,如:printissubclass(student,person)#输出:Trueprintissubclass(person,student)#输出:False想要检查一个对象是否是一个类的实例,可以使用内建函数isinstanec,如:printisinstance(stu,student)#输出:Trueprintisinstance(student,stu)#运行时出错,提示第二个参数必须是一个class查看一个对象属于哪个类,可以用如下语句:print#输出:<class''>查看一个已知类的基类:print#输出:(<class''>,)查看一个对象内所有存储的值:print#输出:{'age':'24','name':'Jonn'}异常内建异常类自定义异常类需从Exception类或其子类继承,如:classmyException(Exception):…捕捉异常捕捉单个异常:使用try/except实现。如:try:x=input('Enterthefirstnumber:')y=input('Enterthesecondnumber:')printx/yexceptZeroDivisionError:print"Thesecondnumbercan'tbezero!"捕捉多个异常,并访问异常本身:try:x=input('Enterthefirstnumber:')y=input('Enterthesecondnumber:')printx/yexcept(ZeroDivisionError,NameError),e:#多个异常类型写成一个元组print"Thesecondnumbercan'tbezero!"printe输入:1a输出:Thesecondnumbercan'tbezero!name'a'isnotdefined捕捉全部异常:在except子句中忽略所有异常类,如try:x=input('Enterthefirstnumber:')y=input('Enterthesecondnumber:')printx/yexcept:print"Error!"else子句与finally子句:whileTrue:try:x=input('Enterthefirstnumber:')y=input('Enterthesecondnumber:')printx/yexcept:print"Error!"else:#直到两数都正常时才退出breakfinally:#每次都会执行print'Welldone!'魔法方法、属性、迭代器在方法名字的前面和后面加上双下划线表示特殊的方法。在python中,由这个特殊名字组成的集合所包含的方法称为魔法方法。构造方法__init__,在一个对象被创建后立即调用构造方法。classfoobar:def__init__(self):='hello'defget_var(self):returnf=foobar()print"()=%s"%()print"=%s"%输出:()=hello=hello重写对象具体有继承机制,在继承时,子类可能会重写超类中已存在的方法。对于构造函数,如果要重写,需调用超类中的构造方法,否则对象可能不会被正确初始化,实例如下:classnew_foobar(foobar):def__init__(self,x,y):=x=ydefdivi(self):return/t=new_foobar(10,5)print"x/y=%s"%()#x,y的子类的构造函数中初始化,输出:x/y=2print"()=%s"%()#运行出错print"=%s"%#运行出错(1)在子类new_foobar的构造函数中添加超类的构造函数:classnew_foobar(foobar):def__init__(self,x,y):(self)=x=y……print"()=%s"%()print"=%s"%输出:()=hello=hello(2)使用super函数(需指定为新式的类)__metaclass__=typeclassnew2_foobar(foobar):def__init__(self,x,y):super(new2_foobar,self).__init__()=x=ydefdivi(self):return/t2=new2_foobar(100,10)print"x/y=%s"%()#输出:x/y=10print"()=%s"%()#输出:()=helloprint"=%s"%#输出:=hello属性(1)直接调用成员函数classrectangle:def__init__(self):=0=0defsetsize(self,size):,=sizedefgetsize(self):return,r=rectangle()=10=5print"=%s"%print"=%s"%()((150,100))#setsize只带一个参数,里面括号不可少,否则运行出错print"=%s"%print"=%s"%输出:=10=5=150=100(2)使用property()函数__metaclass__=typeclassrectangle:def__init__(self):=0=0defsetsize(self,size):,=sizedefgetsize(self):return,size=property(getsize,setsize)r=rectangle()=10=5print"=%s"%print"=%s"%=(150,100)#括号也可以去掉print"=%s"%print"=%s"%print"=",输出:=10=5=150=100=(150,100)静态方法与类成员方法创建类时,静态方法被装入Staticmethod类型的对象中,定义时没有self参数,且能够被类本身直接调用。类成员方法被装入Classmethod类型的对象中。在定义时需要名为cls的类似于self的参数,可以直接用类的具体对象调用。__metaclass__=typeclassmyclass:@staticmethoddefsmeth():print"Thisisastaticmethod"@classmethoddefcmeth(cls):print"Thisisaclassmethod",cls()()输出:ThisisastaticmethodThisisaclassmethod<class''>迭代器一个实现了__iter__()方法的对象是可迭代的,一个实现了next方法的对象是迭代器。classfibs:def__init__(self):=0=1defnext(self):,=,+returndef__iter__(self):returnselff=fibs()i=1forf_valinf:iff_val>1000:print"i=%s;f_val=%s"%(i,f_val)breaki+=1print""f2=fibs()foriinrange(20):print"i=%s;()=%s"%(i,())i+=1输出:i=17;f_val=1597i=0;()=1i=1;()=1i=2;()=2i=3;()=3i=4;()=5i=5;()=8i=6;()=13i=7;()=21i=8;()=34i=9;()=55i=10;()=89i=11;()=144i=12;()=233i=13;()=377i=14;()=610i=15;()=987i=16;()=1597i=17;()=2584i=18;()=4181i=19;()=6765模块和包模块的导入任何python程序都可以作为模块导入。实例如下:前提:目录('/home/feiyao/yehh/own_study/python/import'下有文件和,内容如下:#deffibs(num):result=[0,1]foriinrange(num-2):(result[-2]+result[-1])returnresult#importsys__metaclass__=typeclassstudent():def__init__(self):=''=''defset_name_age(self,name,age):=name=agedefget_name_age(self):print"Hello,mynameis%sandmyageis%s"%,#!/usr/bin/python#importsys'/home/feiyao/yehh/own_study/python/import')importfunimportstudentprint"fibs(5)=",fibs(5)#运行出错,提示fibs未定义print"fibs(5)=",(5)#s=student()#运行出错,提示模块不可调用s=()('Tom','29')()运行python,输出:fibs(5)=[0,1,1,2,3]Hello,mynameisTomandmyageis29包包是另外一类模块,它能包含其他模块,当模块存储在文件(扩展名.py)中时包就是模块所在的目录。它必须包含一个命名为的文件(模块)。如果将它作为普通模块导入,文件的内容就是包的内容。实例:建立一个名为pag的包,其中包括名为cls和fun的模块。包的布局:文件/目录描述…/python/import/PYTHONPATH中的目录…/python/import/pag/pag包总目录…/python/import

温馨提示

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

最新文档

评论

0/150

提交评论