Python详细笔记完整_第1页
Python详细笔记完整_第2页
Python详细笔记完整_第3页
Python详细笔记完整_第4页
Python详细笔记完整_第5页
已阅读5页,还剩177页未读 继续免费阅读

下载本文档

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

文档简介

第1章Python入 第2章(1)编程基础概 第2章(2)字符 第3章序 del删 max和 元组 第4章控制语 第5章函数用法和底层分 第6章(1)面向对象初 init构造方法和new方 del方法(析构函数)和垃圾回收机 call方法和可调用对 第6章(2)面向对象进 重写str()方 第一章Python入 第二章编程基本概 第三章序 第四章控制语 第五章函 第六章面向对象编 第七章模 第八章文件操作 第九章异常和错 第十章数值日期和复杂文本处 第11章GUI编 第12章【项目】坦克大战游戏开 第13章图形绘 第14章数据库编 第15章多线程和并发编 第16章网络编 第17章协程和异步 第18章脚本化系统管 第19章语音识别模块_中英文实时翻译项 第20章Windows下的Python开 第21章【实战】算 第22章【实战】手写数据结 第23章正则表达式和复杂文本操 第24章函数式编程和高阶函 第25章测 第26章【项目】手工实现神经网 1章Python·简介1989年发明,1991年正式公布。官网:\hPython单词是“大蟒蛇”的意思。但是龟叔不是喜欢蟒蛇才起这个名字,而是正在追剧:英国电视喜剧片《蒙提·派森的飞行马戏团》(MontyPythonandtheFlyingCircus)。\hPythonCCPythonimportimportt=forxinrange(360):java类似,大大提高了执行速度,也实现了跨平台。丰富的库(丰富的标准库,多种多样的扩展库 起了像Python,性能像C)去开发。目前主要两个版本:Python2Python31.Python3Python2.7,2.72Python3发Python开发入门Python\h勾选:“AddPythontoenvironmentvariable”。这样就会将Python变量Path中,我们可以在windows的命令行模式下运行Python解释器。IDE(IntegratedDevelopmentEnvironment集成开发环境)Pythonpython.exe互模式会自动打印输出。Py文件中则必须使用print语句。IDLEIDLE介绍IDLEPython(语法智能提示、不同颜色显示不同类型等IDLE是用纯Python基于Tkinter编写,最初的作者正是Python之父Guidovan Ctrl+ Ctrl+第一个PythonIDLEF5run-->runmodule执行这个源程序。第一个Python程序中需要注意的小要点:1(IDE4122import turtle 300 >>> >>> >>> importimport21)编程基础概念本章开始我们通过创建Python文件,并执行该文件。IDLEFile-->newPython文件,并可以编辑该文件内容。我们也可以通过File-->save/saveas保存文件。一般保存成扩展名为py的文件。代码块。“缩进”成为了Python语法强制的规定。器一般设置成:tab制表符就是4个空格。PythonPEP-8\hPythona >>>a=[10,20,30,40,\>>>[10,20,30,40,50,60,70,80,90,>>>a=>>>b='abcdefg\>>>>>>Python中,一切皆对象。每个对象由:标识(identity)、类型(type)、value(值)可返回对象obj的标识。操作。可以使用type(obj)获得对象的所属类型。>>>>>>a=>>>a>>>id(3)>>><classb我爱你>>>id(a)>>><class>>>print(a)>>>id(b)>>><classPython以双下划线开头和结尾的名称通常有特殊含义,尽量避免这种写法。比如:init是类>>>help()help>keywords math,os,phone,MyPhone、MyClass变量名=表达式>>>>>>Traceback(mostrecentcallFile"<pyshell#17>",line1,in<module>NameError:name'my_name'isnot >>>>>>>>>del>>>Traceback(mostrecentcallFile"<pyshell#20>",line1,in<module>NameError:name'x'isnot 相当于:x=123;y=123 >>>>>>>>>>>>print(a,b)21>>>MAX_SPEED=>>>print(MAX_SPEED)MAX_SPEED >>>print(MAX_SPEED)由字符组成的序列。“Python支持整数(如:50,520)和浮点数(如:3.14,10.0,1.23e2),我们可以对数字做如下+5-*/3%3幂8>>>>>>a=>>>a>>>a=>>>a>>>a=>>>a>>>3>>>2**3>>>Traceback(mostrecentcallFile"<pyshell#37>",line1,in<module>ZeroDivisionError:divisionby>>>divmod(10,5)(2,0)>>>divmod(10,3)(3,1)>>>>>>Traceback(mostrecentcallFile"<pyshell#31>",line1,in<module>ZeroDivisionError:divisionby>>>divmod(13,3)(4,1) 1 ·0x0X, f>>>>>>>>>0b101>>>SyntaxError:invalid>>>0o10>>>0xff>>>0xf>>>0x10 >>>>>>int("456")>>>Traceback(mostrecentcallFile"<pyshell#41>",line1,in<module>ValueError:invalidliteralforint()withbase10:>>>Traceback(mostrecentcallFile"<pyshell#42>",line1,inValueError:invalidliteralforint()withbase10:Python2中,int是32位,可以存储从-2147483648到2147483647的整数(约±21亿)。Long类型是64位,可以存储:-2^63--2^63-1之间的数值。Python3int可以存储任意大小的整数,long>>>>>>googol=>>>googolPython3中可以做超大数的计算,而不会造成“整数溢出”,这也是Python特别适ab10形式的科学计数法表示。比如:3.14,表示成:314E-2314e-2。的结果是a=a+1 a+=1a+=a=a+a-=a=a-a*=a=a*a/=a=a/a//=a=a**=a=a%=a=a%计算机中时间的表示是从“197011日00:00:00”开始,以毫秒(1/1000)进行计算。我们也把1970年这个时刻成为“unix时间点”。毫秒>>>>>>import>>>b=>>>>>>totalMinutes=>>>totalMinutes>>>totalMinutes=>>>totalMinutes>>>totalHours=>>>totalHours>>>totalDays=>>>totalDays>>>totalYears=importturtleimportimportturtleimportx1,y1=100,100x2,y2=100,-x3,y3=-100,-x4,y4=-distance=math.sqrt((x1-x4)**2+(y1-y4)**2)Python3TrueFalse10,甚至可以和数>>>>>>a=>>>b=>>>a+b等于-比较对象的值是否相等(ab)返回False等于-比较对象的值是否相等(ab)返回False(ab)返回>大于-返回x(ab)返回False<小于-返回xy(ab)返回true大于等于-返回xy(ab)返回False小于等于-返回xy(ab)返回truexorxfalsexandxtruey xtruexfalseisisnotis与==区别:is==用于判断引用变量引用对象的值是否相等,默认eq象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm1、is比较两个对象的id24、is运算符比==效率高,在变量和None进行比较时,应该使用is>>>>>>a=>>>b=>>>a==>>>aisb>>>id(a)>>>id(b)>>>c=>>>d=>>>cisd>>>id(c)>>>id(d)and <<,~>>>a=>>>3<a<10 >>>a=>>>b=>>>c=>>>bin(c) >>>bin(c&b)>>>bin(c^b)>>>a= >>>a= 1 ==> “3”+“2”==> [10,20,30]*3==>sum+= +=sum=sum+ a+ -=num=num-a*=a=a*a=a/a=a=a%a=a=a=a=a=~*/%+>>&位^<=<><>===%=/=//=-=+=*=isisinnotnotorpython510x13y1)(ab9(512x 22)字符串字符串的本质是:字符序列。Python的字符串是不可变的,我们无法对原字符串做任默认就是16位Unicode编码,ASCII码是Unicode编码的子集。ordUnicode使用内置函数chr()可以把十进制数字转换成对应的字符。>>>>>>ord('A')ord('高')>>>chr(66)ord('淇') >>>a="I'ma>>>print(a)I'mateacher!>>>b='my_nameis>>>print(b)my_nameis"TOM">>>resume='''name="gaoqi" >>>print(resume) >>>c=>>>len(c)d'abc>>>len(d)>>>>>>a=>>>>>>print(a)>>>print('aaabb\可以使用+将多个字符串拼接起来。例如:’aa’+’bb’==>’aabb>>>>>>a=>>>>>>b=>>>>>>>>>a=>>>符。我们可以自己通过参数end=“任意字符串”。实现末尾添加任何内容:sxtmynameinput("请输入名字:")mynamestr(5.20)==> str(True)==>print()函数时,解释器自动调用了str()将非字符串的对象转成了字符串。我们0,第二个偏移量是1,以此类推。直到len(str)-1>>>>>>a=>>>>>>>>>>>>a[26->>>a[->>>a[->>>a[-Traceback(mostrecentcallFile"<pyshell#91>",line1,in<module>IndexError:stringindexoutof>>>>>>a=>>>Traceback(mostrecentcallFile"<pyshell#94line1in<module>TypeError:'str'objectdoesnotsupportitem>>>>>>a=>>>aa.replace('c'ab字符串。内存图如下:slice[起始偏移量start:终止偏移量end:步长step] [startstart[start:endstartend-[start:end:stepstart倒数第八个到倒数第步长为负,从右到左偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成-1。例如:>>>"abcdefg"[3:50]将”tobeornottobe>>>>>>a="tobeornotto>>>['to','be','or','not','to',>>>a.split('be')['to','ornotto','']()的作用和>>>>>>a=>>>'*'.join(a)joinjoinjoin(),不同的效率(importimporttime01=time.time() a=""foriinaa+=time02=time.time() time03=time.time() li=[]foriinrange(1000000):a=time04=time.time() Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母>>>>>>a=>>>b=>>>aisb>>>c=>>>d=>>>cisd>>>str1=>>>str2=>>> is>>>str1+str2=="aabb"isnotisid(obj1)是否和id(obj2)相等。innotina18623我们可以通过strip()去除字符串首尾指定信息。通过lstrip()去除字符串左边指定信息,>>>>>>"*s*x*t*".strip("*")>>>"*s*x*t*".lstrip("*")>>>"*s*x*t*".rstrip("*")>>>" a= 产生新的字符串,首字母 产生新的字符串,每个单 产生新的字符串,所有字 PROGRAMMING,产生新的字符串,所有字 产生新的,所有字母大小 PROGRAMMING,>>>>>>a.center(10,"*")>>>a.center(10) >>>a.ljust(10,"*")isalpha( isspace(isupperislower()是否为小写字母sxtisalpha()>>>"234.3".isdigit()>>>"23423".isdigit()>>>"aB".isupper()>>>"A".isupper()aa{0}a.format("高淇",18)a.format("高希希",6)b{0},年龄是{1}。{0>>>cname},年龄是c.format(age=19,name='高淇')'名字是高淇,年龄是19'>>>>>>>>>"我是a{0},我的存款有a.format("高淇",3888.234342)'我是高淇,我的存款有3888.23'355数字补x数字补x右对齐(默认,宽度为左对齐(宽度为中间对齐(宽度为能创建新的字符串对象。但是,经常我们确实需要原地修改字符串,可以使用io.StringIO对象或array模块。>>>>>>import>>>>>>s="hello,>>>sio=>>><_io.StringIOobjectat>>>sio.getvalue()'hello,sxt'>>>sio.seek(7)>>>sio.write("g")>>>sio.getvalue()'hello,gxt'python510x13y1)(ab9(512x 将”tobeornottobe>>>a=>>>b=>>>c=>>>d=>>>ais #输出 >>>cis cname},年龄是>>>3a=a=[10,20,30,40]a[10,20,'abc',True]xlistlistindex>>>a=a a >>>a=>>>[0,1,2,3,4,5,6,7,8,>>>a=>>>['g','a','o','q','i',',','s','x',range([startendstep])start参数:可选,表示起始数字。默认是0end参数:必选,表示结尾数字。step1python3rangerangelist()方法将其>>>list(range(3,15,2))[3,5,7,9,11,13][15,14,13,12,11,10,9,8,7,6,5,[3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-和if语句。在此,仅做基本介绍。在我们控制语句后面,会详细讲解更多列表推导式的细a in >>>[0,2,4,6,a[x*2forxinrange(100if if>>>[0,18,36,54,72,90,108,126,144,162,180,>>>a=>>>>>>[20,40,>>>a=>>>id(a)>>>a=>>>id(a)>>>a=>>>id(a)>>>>>>id(a)insert()方法可以将指定的元素插入到列表对象的任意制定位置。这样会让插入位置后>>>a=>>>>>>[10,20,100,>>>a=>>>b=>>>a['sxt',100]>>>['sxt',100,'sxt',100,'sxt',>>>c=>>>d=>>>>>>del删除>>>a=>>>del>>>a>>>a=>>>>>>[10,20,30,>>>a.pop(1)>>>[10,30,>>>a=>>>>>>[10,30,40,50,20,30,20,>>>Traceback(mostrecentcallFile"<pyshell#208>",line1,in<module>ValueError:list.remove(x):xnotin>>>a=>>>a[2]>>>Traceback(mostrecentcallFile"<pyshell#211>",line1,in<module>IndexError:listindexoutofstart和end指定了搜索的范围。>>>a=>>>a.index(20)>>>a.index(20,3) 5 6>>>a=>>>a.count(20)>>>a=>>>len(a)大于0则表示存在。但是,一般我们会使用更加简洁的in关键字来判断,直接返回True或False。>>>a=>>>20ina>>>100notina>>>30notinaslice[起始偏移量start:终止偏移量end[:步长step]] [startstart索引开始到[start:endstart到end-[start:end:step]从start提[20,40,倒数第五个到倒数[70,60,50,40,30,20,偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成”长度-1”。例如:>>>[20,30,forobj list1=[30,40,50]list2=list2list2list2list1=[30,40,50]list2=[]+>>>a=>>>id(a) >>>[10,20,30,>>>a= >>>[40,30,20,>>>import >>>[20,40,30,>>>a=>>>id(a)a >>>[10,20,30,>>>id(a)>>>a=>>>id(a)>>>b=>>>[10,20,30,>>>id(a)>>>id(b)c >>>[40,30,20,reversedreverse()方法不同的是,内置函数>>>a=>>>c=>>><list_reverseiteratorobjectat>>>list(c)[40,30,10,20]>>>list(c)max和min[40,30,20,10]>>>a=>>>max(a)>>>min(a)>>>a=>>>sum(a)aa=]print(a[1][0],a[1][1],a[1][2])高小二1920000aa=]forminforninrange(4):a= a=>>>a=>>><class>>>a= a=>>><class通过tuple()创建元组b=tuple() b=tuple("abc")b=tuple(range(3))b=tuple([2,3,4])>>>>>>a=>>>Traceback(mostrecentcallFile"<pyshell#313>",line1,in<module>TypeError:'tuple'objectdoesnotsupportitem>>>a=>>>a[1]>>>(10,>>>a[:4](20,10,30,9)序,只能使用内置函数sorted(tupleObj),并生成新的列表对象。>>>a=>>>sorted(a)[8,9,10,20,30]>>>a=>>>b=>>>c=>>>d=>>>[(10,40,70),(20,50,80),(30,60,我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的next()>>>>>>s=(x*2forxin>>><generatorobject<genexpr>at>>>tuple(s)(0,2,4,6,8)>>>list(s) >>><generatorobject<genexpr>at>>>tuple(s)>>>s=(x*2forxin>>>s.next()>>>s.next()>>>s.next()a=>>>a=>>>b=>>>a=c d >>>k=>>>v=>>>d=>>>{'name':'gaoqi','age':18,'job':>>>a=>>>{'name':None,'age':None,'job':aname':'gaoqi','age':18,'job':'programmer'} >>>a=>>>Traceback(mostrecentcallFile"<pyshell#374>",line1,in<module>KeyError:通过getNone;也可以设定指定键不存在时默认返回的对象。推荐使用get()获取“值对象”。>>>a.get('sex','一个男人')>>>dict_items([('name','gaoqi'),('age',18),('job',>>>a.keys()>>>dict_values(['gaoqi',18,len>>>a=>>>"name"ina>>>a=>>>>>>{'namegaoqi'age16'jobprogrammer'address1使用update(key>>>a=={'>>>>>>{'namegaoxixi''age18'jobprogrammermoney1000'sexdelclear()删除所有键值对;pop()删除指定>>>a=>>>>>>{'age':18,'job':>>>b=>>>bpopitem():随机删除和返回该键值对。字典是“无序可变序列”,因此没有第一个元素、最后一个元素的概念;popitem弹出随机的项,因为字典并没有"最后的元素"或者其>>>a=>>>a.popitem()('job','programmer')>>>{'name':'gaoqi','age':>>>a.popitem()('age',18)>>>>>>>>>x>>>y>>>z>>>>>>a>>>>>>a>>>b序列解包用于字典时,默认是对“键”进行操作;如果需要对键值对操作,则需要使用items();如果需要对“值”进行操作,则需要使用values();>>>s= >>> >>>name >>>name={={={tb=foriinrange(len(tb)): #i-->0,1,2foriinrange(len(tb)):每个单元叫做bucket。每个bucket有两部分:一个是键对象的引用,一个是值对象的引>>>>>>a=我们要把”name”=”gaoqi”这个键值对放到字典对象a中,首先第一步需要计算键”name”的散列值。Python中可以通过hash()来计算。>>>>>>由于数组长度为8,我们可以拿计算出的散列值的最右边3位数字作为偏移量,即“101”,十进制是数字5。我们查看偏移量5,对应的bucket是否为空。如果为空,则4。再查看偏移量为4的bucketbucket>>>>>>和存储的底层流程算法一致,也是依次取散列值的不同位置的数字。假设数组长度为55bucketNone。如果不为空,则将这个bucket的键对象计算对应散列值,和我们的散列值进行比较,如果相等。则将对仍然没有找到。则返回None。流程图如下:112支持通过eq233>>>a=>>>{3,5,>>>>>>{9,3,5,使用set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则只保>>>a=>>>b=>>>{'b','a',>>>a=>>>>>>{10,50,>>>a=>>>b= {1,3,'sxt','he', a- {1, {1,3,'sxt','he', {1,a100,200,300]推导式生成列表:a[x*2forxinrange(100ifx%9==0 4章控制语句IDE是PyCharm。当然,还有其他IDE可供我们使用:\h根据win系统是64还是32位,选择不同的类型。301.选择:“CreateNewProjectInterpreter部分是选择新建项目所依赖的python库,第一个选项会在项目中建立一个系统安装的python独立运行。ExistingInterpreterpythonvenv器就可以选择本地安装的python环境。NewEnvironment可以在BaseInterpreter系统中安装的Python解释器,这样做的好处如下:‘·把字体调大一些 if条件表达式:numnuminput("输入一个数字:")ifint(num)<10:False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range对象、空迭代对象。if3:if3: a=[] ifa:s="False" ifs:c=ifif3<c andif andc<20·if3<cand 条件表达式:1/12/numnuminput("输入一个数字:")ifint(num)<10: if printnumifint(num)<10elseif条件表达式11/elif条件表达式2/...elif条件表达式n:nn]60)、及格(60-79)、良scorescoreint(input("请输入分数"))grade=''gradegradegrade="良好"grade="优秀"scorescoreint(input("请输入分数"))grade=''ifscore<60grade="不及格" score<80:grade="及格" score<90:grade="良好" gradexxint(inputxyint(inputyif(x==0andy==0):print("原点")elif(x==0):print("y轴")elif(x>0andy>0):print("第一象限")elif(x<0andy>0):print("第二象限")elif(x<0andy<0):print("第三象限")if表达式if表达式2if表达式0-10090A,80B,70C,60以上是D。60以下是E。scoreint(input(0-100))grade=""ifscore>100orscoreint(input(0-100))ifgrade="A"elifscore>=80:grade='B'elifscore>=70:grade='C'elifscore>=60:grade='D'grade=scoreint(input(0-100))degree="ABCDE"num=ifscore>100orscoreint(input(0-100))num=score//10ifnum<6:num=5复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果为True则重复执行循环体里的语句。图示如下: numnum=whilenum<=10:num+=1numnum=sum_all=sum_evensum_even sum_odd=0 whilenum<=100:sum_all+=ifnum%2==0:sum_even+=numelse:sum_odd+=numnum print("1-100sum_all)print("1-100奇数的累加和",sum_odd) forxforx dd={'name':'gaoqi','age':18,'address':'西三旗001号楼'}forx #遍历字典所有的keyforx forx forx range(start, startend(end)start0开始。step是可选的步长,默认为1。如下是几种典型示例:foriin 产生序列:012345678foriin 产生序列:345678foriin for1-1001-100计算1-100之间奇数的累加和。sum_allsum_all=sum_even=sum_odd=fornuminsum_all+=ififnum%2==0:sum_even+=numelse:sum_odd+=num0000011111222223333344444forxinrange(5):foryinrange(5): forforminforninrange(1,m+1): 4*3=125*2=105*3=155*4=206*2=126*3=186*4=246*5=307*2=147*3=217*4=287*5=357*6=428*2=168*3=248*4=328*5=408*6=488*7=569*2=189*3=279*4=369*5=459*6=549*7=639*8=72r1=r1=dict(name="高小一",age=18,salary=30000,city="北京")r2=dict(name="高小二",age=19,salary=20000,city="上海")r3=dict(name="高小三",age=20,salary=10000,city="深圳")tb=[r1,r2,r3]forxinifx.get("salary")>15000:breakwhileforbreakwhilewhileainput("请输入一个字符(Qq)")ifa.upper()=='Q':【操作】要求输入员工的薪资,若薪资小于0则重新输入。最后打印出录入员工的数量和empNumempNum=salarySum=0salarys=[]whileTrue:sinput("请输入员工的薪资(QqififempNum+=1salarySum+=float(s)请输入员工的薪资(Qq)2000请输入员工的薪资(Qq)3000请输入员工的薪资(Qq)4000请输入员工的薪资(Qq)5000请输入员工的薪资(按Q或q结束)Q员工数4录入薪资:[2000.03000.04000.0结束,则会执行else子句,否则不执行。语法格式如下: 44salarySum=salarySum=0salarys=[]foriinsinput4(QqififsalarySum+=float(s)importstart=time.time()foriinrange(1000):result=forminrange(10000):end=time.time()start2=time.time()foriinresult=[]c=i*1000forminrange(10000):end2=time.time()我们可以通过namesnamesages=(18,16,20,25)forname,age,jobinzip(names,ages,jobs):PythonPython in可迭代对象 in可迭代对 >>>[xforxinrange(1,5)][1,2,3,4]>>>[x*2forxinrange(1,5)][2,4,6,8]>>>[x*2forxinrange(1,20)ifx%5==0][10,20,30]>>>[a in"abcdefg"]['a','b','c','d','e','f','g']>>>cells=[(row,col)for rowinrange(1,10)forcolinrange(1,10)] >>>forcellincells: iffor>>>my_text='iloveyou,ilovesxt,ilove>>>char_count= forcin>>>{'':9,'i':4,'l':3,'o':5,'v':3,'e':3,'y':1,'u':1,',':2,'s':1,'x':1,'t':1,'g':1,'a':1,'q': in可迭代对象 in可迭代对 >>>{xforxinrange(1,100)if{99,36,72,9,45,81,18,54,90,27,>>>(xforxinrange(1,100)if<generatorobject<genexpr>at>>>gnt=(xforxinrange(1,100)if>>>forxingnt:print(x,end='')9182736455463728190>>>forxingnt:print(x,end='')importimportt=my_colors=foriinrange(10):#01234 importwidth=num=x1=[(-400,400),(-y1=[(-400,400),(-400,400-t=turtle.Pen()foriinrange(0,19):foriinrange(0,19): 输入一个学生的成绩,将其转化成简单描述:不及格(小于60)、及格(60-79)、良好0-10090A,80B,70C,60是D。60以下是E利用for循环,计算1-100之间数字的累加和;计算1-100 员工一共4人。录入这4位员工的薪资。全部录入后,打印提示“您已经全部录入45我们前面使用的PythonimportPython中,定义函数的语法如下: 函数名([参数列表]): ifa>b:20较大值30较大值printMaxprintMax(a,b)。ab在调用函数时,传递的参数称为“实际参数”,简称“实参”。上面代码中,printMax(10,20),10和20就是实际参数。defdefhelp(函数名.docHelpHelponfunctionprint_starinmodulemaindefdefprint_star(n):defmy_avg(a,b):returndefmy_avg(a,b):returncmy_avg(20,30)defdefprint_star(n):c=print_star<functionprint_starat0x0000000002BB8620>行print_star(3)的效果是完全一致的。Python中,圆括号意味着调用函数。在没有圆括号的情况下,Python会把函数当做普通对象。zhengshu=intglobalaa=defglobalaa=defa=aa=def234{'c':4,'b':3,'a':2}{'name':'main','doc':None,'package':None,'loader':<class'_frozen_importlib.BuiltinImporter'>,'spec':None,'annotations':{},'builtins':<module'builtins'(built-in)>,'file':'E:\\PythonExec\\if_test01.py','a':100,'f1':<functionf1at0x0000000002BB8620>}importmathimportdefstart=foriinrange(10000000):end=time.time()defb=start=foriinrange(10000000):end=time.time()函数的参数传递本质上就是:从实参到形参的赋值操作。Python所有的赋值操作都是“引用的赋值”。所以,Python中参数的传递都是“引用传递”,不bb=def m:b:[10,20,aa=defn=n+200n:n:a:importcopydeftestCopy():a=[10,20,[5,b=print("a",print("b",b) print("a",print("b",defa=[10,20,[5,b=print("a",print("b",b) print("a",print("b",

a[10,20,[5,b[10,20,[5,a[10,20,[5,6,b[10,20,[5,6,7],a[10,20,[5,b[10,20,[5,a[10,20,[5,b[10,20,[5,6,7],a=deftest01(m):m[2][0]=888a:m:(10,20,[888,m:(10,20,[888,defdef 23Traceback(mostrecentcallFile"E:\PythonExec\if_test01.py",line5,in<module>TypeError:f1()missing1requiredpositionalargument:deff1(a,b,c=10,d=20):deff1(a,b,c=10,d=20):

891089198919defdef 892030defdefdef 89(19,89{'name':'gaoqi','age':89(20,30){'name':'gaoqi','age':defdef (2,)3的方法。lambda函数实际生成了一个函数对象。 ff=lambdaa,b,c:a+b+cg=[lambdaa:a*2,lambdab:b*3,lambdac:c*4]<function<lambda>at0x0000000002BB8620>1221str语法:eval(source[,globals[,locals]])->valuesourcePythoncompile()返回的代码对象globals:可选。必须是dictionarys="print('abcde')"a=b=c=dict1=d=eval("a+b",dict1)似于大家中学数学学习过的“数学归纳法”。每个递归函数必须包含两个部分:nn-1【操作】使用递归函数计算阶乘defdefifn==1:return1returnn*factorial(n-1)foriinrange(1,6):1!=2!=3!=4!= print('f1defprint('f2f1running...f2封装-数据隐藏贯彻 Yourself)原defprintName(isChinese,name,familyName):definner_print(a,b):print("{0}ifdefprintChineseName(name,familyName):print("{0}{1}".format(familyName,name))defprintEnglishName(name,familyName):print("{0}{1}".format(name,familyName)) nonlocala=defb=defdefnonlocalprint("innerb=global a=print("outerb:",b)PythonLEGBLocal-->Enclosed-->Global-->Builtin Built 指的是Python如果某个namelocal)命名空间中没有找到,接下来就会在闭包作用域间中进行查找,最后会在内建(built-in)命名空间搜索(如果一个名称在所有命名空间中都没有找到,就会产生一个NameError)。#测试#测试str="global"defouter():str=defstr="inner"strLEBGm(n)12... 61)面向对象初步面向对象(ObjectorientedProgramming,OOP)编程的思想主要是针对大型Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向一步一步,最终完成。这个适合简单任务,不需要过多协作的情况下。比如,如何开车?1.发动车2.挂挡3.踩油门4.走你面向过程适合简单、不需要协作的事务。但是当我们思考比较复杂的问题,比如“如因此,面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。但是,具体到随着数据变多进化“数组”;数据类型变复杂,进化出了“结构体”;处理数据的方式和像30,40,50.4等这些数字,可以看做是简单数据。最初的计算机编程,都是像这样structintchardoubleclassclasscompany count=0 definit(self,name,score):=name self.score=scoreStudent.count=def classclassdefinit(self,name,score): =name self.score=def#s1init 创建对象,我们需要定义构造函数init()方法。构造方法用于执行“实例对象的初始化工init名称固定,必须为:init 和score。defdefinit=name self.score=score比如:s1=Student('张三',80)initnew如果我们不定义init方法,系统会提供一个默认的init方法。如果我们定义了带参的init方法,系统不创建默认的init方法。self必须为构造函数的第一个参数,名字可以任意修改。但一般遵守惯例,都叫做self。实例属性一般在init()方法中通过如下代码定义:self.实例属性名=初始值selfobj01=类名 #创建对象,调用init()初始化属obj01.实例属性名= 方法名(self[,形参列表]):aa=obj.pass空语

类名:”。实际上,当解释器执行class语句时,classclass Stu2Stu2=Students1=Stu2()<main.Studentobjectat量Stu2,也能实现相关的调用。说明,确实创建了“类对象”。【注】pass遇到暂时不知道往方法或者类中加入什么时,可以先用pass占位,后期再补上。 类变量名=初始值classclasscompany="SXT" count=0 definit=name self.score=scoreStudent.countStudent.count=def#s1init我的公司是:SXT张三的分数是:80 [,形参列表]):clsclassclasscompany=defdefprintCompany(cls): 静态方法名([形参列表]):classclasscompany defadd(a,b): returna+bclassclasscompany="尚学堂 count definit=name self.score=scoreStudent.count=def#s1init del方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象Python(0),由垃圾回收器调用del方法。deldel方法。系统会自动提供del方法,一般不需要自定义析构方法。classdefdelp1=Person()p2=Person()delp2销毁对象:<main.Personobjectat0x02175610>销毁对象:<main.Personobjectat 定义了callclassclassdefcall(self,yearSalary=salary*12daySalary=hourSalary=s={'monthSalary':5000,'yearSalary':60000,'daySalary':166,'hourSalary':在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含3Python中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由建议:不要使用重名的方法!Python中方法没有重载。classclassdefdefp1=classdefdefdefPerson.playPerson.play=play_gamePerson.work=work2p=Person()类外部可以通过“_类名classcompany definit=self.age defdefprint("我的公司是:",Employee.print(,"的年龄是:",self.self.def p1Employee( print(p1._Employeeage) 性。通过ee. ['_Personage', '_Personleg_num', '_Personsleep', 'class', 'delattr','dict','dir','doc','eq','format','ge','getattribute','gt'hash','init','init_subclass','le','lt','module','ne','new','reduce','reduce_ex','repr','setattr','sizeof','str','subclasshook','weakref','name','say_age']腿的数目:高淇的年龄是:18从打印的Person对象所有属性我们可以看出。私有属性“age”在实际存储时是按照“_Personage”这个属性来存储的。这也就是为什么我们不能直接使用“age”而可以使用“_Personage”的根本原因。classdefreturnemp1= @property@propertyemp1.salary=1-10000的数字。这时候,我们就需要通过getter、setter方法来处理。classdefdefinit=self.salary=def{1}".format(self.salary,(12*self.returnself.defself.salary=emp1Employee(emp1.salary=-_xxx:保护成员,不能用“frommoduleimport*”导入,只有类对象和子类对象能访xxxxxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问。(但,在类外_类名xxxPython)classclasscompany="尚学堂 count definit=name self.score=scoreStudent.count=def#s1init和height不传,则默认是100.getArea(62)面向对象进阶Python支持多重继承,一个子类可以继承多个父类。继承的语法格式如下: 子类类名(父类1[,父类2,...]):类,里面定义了一些所有类共有的默认实现,比如:new()。父类名.init(self,参数列表)classclassdefinit(self,name,age):=nameselfself.age=defprint(,"的年龄是:",self.classdefinit(self,name,age,score):self.score=scorePerson.init(self,name,age)#构造函数中包含调用父类构造函数。根据需要,不是必须。子类并不会自动调用父类的我们必s1Student("张三",15,85)张三的年龄是:['_Personage','class','delattr','dict','dir','doc','eq','format','ge','getattribute','gt','hash','init','init_subclass','le','lt','module','ne','new','reduce','reduce_ex','repr','setattr','sizeof','str','subclasshook','weakref','name','say_age','score']classclassdefinit(self,name,age):=nameself.age=defdefclassdefinitself.score=Person.init defdefs1Student张三的分数是:85报告老师,我是张三张三的年龄是:15mro()或者类的属性mroclassA:passclassclassA:passclassB(A):passclass[<class'main.C'>,<class'main.B'>,<class'main.A'>,<class入研究一下object类的结构。对于我们继续深入学习Python很有好处。为了深入学习对象,我们先学习内置函数dir(),他可以让我们方便的看到指定对象所有的classclassdefdefinit(self,name,age):=nameself.age=agedefsay_age(self):obj=object()s2Person("高淇",18)['['class','delattr','dir','doc','eq','format','ge','getattribute','gt','hash','init','init_subclass','le','lt','ne','new','reduce','reduce_ex','repr','setattr','sizeof','str','subclasshook']['class','delattr','dict','dir','doc','eq','format','ge','getattribute','gt','hash','init','init_subclass','le','lt','module','ne','new','reduce','reduce_ex','repr','setattr','sizeof','str','subclasshook','weakref','age','name','say_age']

age<class'int'>name<class'str'>say_age<class objectstrstr()经常用于print()方法,帮助我们查看对象的信息。str()可以重写。classclassdefinit(self,name,age):=nameself.age=agedefstrreturn"名字是:{0},年龄是{1}".format(,self.pPerson("高淇",18)cc=classdefclassdefclassdefMRO(MethodResolutionOrder):方法解析顺序。我们可以通过mro()方法获得classdefdefprint("sayclassdefdefprint("sayclassdefc=classdefprint("A:print("sayclassdefprint("sayb= <main.Bobjectat0x007A5690>sayAAAsayclassclassdefclassdefclassdefdefif aa=b=c=d=a.add(b)c=d=对象创建:prepr,a.xxx=lt,le,gt,ge,or,xor,lshift,mul,truediv,modclassdefinit(self,name):=namedefadd(self,ifreturn"{0}--{1}".format(,)defmul(self,ifisinstance(other,int):return*otherp1=Person("高淇")p2Person("高希希")x=p1+p2obj.obj.class.class.class.class.subclassesclassclassclassC(B,A):definit(self,nn):self.nn=nndefc=C(3)print(c.dict)print(c.class)print(C.bases)print(A.subclasses['class','delattr','dict','dir','doc','eq','format','ge','getattribute','gt','hash','init','init_subclass','le','lt','module','ne','new','reduce','reduce_ex','repr','setattr','sizeof','str','subclasshook','weakref','cc','nn']<class'main(<class'main.B'>,<class'main[<class'main.C'>,<class'main.B'>,<class'main.A'>,<class'object'>][<class'

温馨提示

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

评论

0/150

提交评论