丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
程序的格式框架,即段落格式,是Python语法的一部分,可以提高代码的可读性和可维护性。
Python语言采用严格的缩进来表示程序逻辑。也就是我们所说的Python程序间的包含与层次关系。一般代码不要求缩进,顶行编写且不留空白。在if、while、for、def、class等保留字所在完整语句后通过英文的“:”结尾并在之后行进行缩进,表明后续代码与紧邻无缩进语句的所属关系。
缩进可以用Tab键实现,也可以用多个空格实现(一般是4个空格),但两者不能混用。建议采用4个空格方式书写代码。
注释是代码中的辅助性文字,会被编译器或解释器略去,不被计算机执行,一般用于程序员对代码的说明。Python语言中使用“#”表示一行注释的开始。注释可以在一行中任意位置通过“#”开始,其后面的本行内容被当作注释,而之前的内容依然是Python执行程序的一部分。
注释的作用:
#-*-coding:utf-8-*-#@File:demo.py#@author:Flymeawei#@email:1071505897@qq.com#@Time:2022/8/213:40#单行注释'''多行注释'''"""多行注释"""2.1.3续行符Python程序是逐行编写的,每行代码长度并无限制,但从程序员角度,单行代码太长并不利于阅读。这个时候就可以使用续行符将单行代码分割为多行表达。
Python中的续行符为“\”。续行符之后不允许再存在空格,即续行符后直接换行。
print("云南的城市有{}\n{}\n{}\n{}".format('昆明',\'曲靖',\'大理',\'丽江'))2.2语法元素的名称Python语言的基本单位是单词,少部分单词是Python语言规定的,被称为保留字。大部分单词是用户自己定义的,通过命名过程形成了变量或函数,用来代表数据或代码,称为标识符。
变量是保存和表示数据值的一种语法元素,变量的值是可以改变的,通过赋值运算符“=”方式被修改。Python语言中,变量可以随时命名、随时赋值、随时使用。
由三部分组成:
"""标识:id类型:type值:value"""多次赋值后将指向新的空间
name='hello'#第一次赋值print(id(name))#标识#2026989330544name='world'#第二次赋值print(id(name))#20269893171682.2.2保留字保留字也称keyword关键字,被编程语言内部定义并保留使用的,每种程序设计语言都有一套保留字,保留字一般用来构成程序的整体框架,Python3.x中一共有35个保留字。
importkeyword#导入关键字模块print(keyword.kwlist)#调用keyword模块的kwlist方法Python3.x中的35个保留字
andasassertasyncawaitbreakclasscontinuedefdelelifelseexceptFalsefinallyforfromglobalifimportinislambdaNonenonlocalnotorpassraisereturnTruetrywhilewithyieldPython二级考试涉及到的保留字一共有22个。选学5个:None、finally、lambda、pass、with。Python中的保留字也是大小写敏感的。举例:True为保留字,而true则不是保留字。
标识符可以简单的理解为一个名字,主要用来标识变量、函数、类、模块和其他对象的名称。
标识符的命名规则
ASCII码表
ASCII码表字符解释
Python提供的3种数值类型:整数类型:与数学中的整数一致,包含正、负、0。一个整数有二进制、八进制、十进制、十六进制4种表示方式。
浮点数类型:与数学中的小数一致,没有取值范围限制,可正、可负。有两种表示形式,一种是小数点的形式,另外一种是科学计数法。浮点数只有十进制形式。
复数:与数学中的复数一致,采用a+bj的形式表示,存在实部和虚部。
计算机经常处理文本信息,文本信息在程序中使用字符串类型表示。在Python中使用单引号或双引号括起来的一个或多个字符来表示。单引号和双引号的作用相同。
#字符串类型被称为不可变的字符序列print('我用python')print("我用python")print('''我用python''')print(type('我用python'))print(type("我用python"))print(type('''我用python'''))字符序列有两种序号体系:正向递增序号:有效范围为[0,N-1],其中N为字符串中字符的个数。最左侧的字符序号为0,依次向右递增,最右侧字符序号为N-1。
s='helloword'print(s[0])#hprint(s[-10])#h还可以采用[N:M]格式获取字符串的子串,这种操作被称为切片操作。[N:M]获取字符串中从N到M(但不包含M)的连续的子字符串。N和M都表示的是索引序号,可以混合使用正向递增序号和反向递减序号。
s='helloword'print(s[0:5])#helloprint(s[0:-5])#hello通过Python默认提供的len()函数获取字符串的长度,一个中文字符和一个英文字符的长度都记为1。
print(len(s))#102.4程序的语句元素2.4.1表达式产生或计算新数据值的代码片段称为表达式。类似于数学中的公式,一般由数据和操作符构成。
对变量进行赋值的一行代码被称为赋值语句。在Python中使用一个“=”表示“赋值”,即将等号右侧表达式计算后的结果值赋给左侧的变量。
基本赋值语句语法:变量=表达式
同步赋值语句就是同时给多个变量进行赋值。同步赋值语句语法:
变量1,变量2,......变量N=表达式1,表达式2,......,表达式N
同步赋值语句应用最多的就是互换变量的值,即交换两个变量的值。
Python程序会经常使用到当前程序之外已有的功能代码,这个过程叫引用。
Python语言中使用import这个保留字引用当前程序以外的功能库。import<功能库名称>引用功能库之后使用功能库.函数名()的方式调用基本功能,这种方式简称为“A.B()”方式。
除了赋值语句之外,Python还有分支语句和循环语句。先简单介绍一下使用,后面后详细讲解。
分支语句:根据判断条件选择程序执行路径。一般包含单分支结构、双分支结构和多分支结构。单分支语法结构:
if条件:语句块任何能够产生True或False的语句都可以作为条件,当条件为True时,则执行语句块中的内容。
双分支语法结构:
if条件:语句块1else:语句块2当条件为True时,执行语句块1,当条件为False时,执行语句块2。其中if...else都是保留字。
循环结构与分支结构一样都是程序控制语句,它的作用是根据判断条件确定一个程序是否再执行一次或者多次。
条件循环的语法结构:
while条件:语句块1语句块2当条件为True时,执行语句块1,然后再次判断条件,当条件为False时,退出循环,执行语句块2。
input()函数是从控制台获得用户的一行输入,无论用户输入什么内容,input()函数都以字符串类型返回。input()函数可以包含一些提示性文字,用来提示用户。
input语法格式:变量=input('提示性文字')无论用户输入的是数字还是字符,input()函数统一按照字符串类型输出,为了后续能够操作用户输入的信息,需要将输入指定一个变量进行存储。
input()函数的提示性文字不是必须的,可写可不写。
eval(s)函数将去掉字符串s最外侧的引号,并按照Python语句方式执行去掉引号后的字符内容。
eavl语法格式:变量=eval(字符串)
变量用来保存对字符串内存进行Python运算的结果。
eval()函数去掉了字符串’1.2’最外侧的引号,结果赋值给a,所以a的类型为float类型。eval()函数去掉了字符串’1.2+3.4’最外侧的引号,对其内容当作Python语句进行运算,运算的结果为4.6,保存到变量a中,所以a的类型是float类型。
当eval()函数处理字符串’python’时,字符串去掉了两边的引号,Python语句将其解释为一个变量,由于这个变量在之前别有定义,因此解释器报错。如果定义变量python并赋值为123,再运行这个语句时就没有问题,如果输出为123。
eval()函数经常和input()函数一起使用,用来获取用户输入的数字。
eval()与input()函数一起使用的语法:变量=eval(input(提示性文字))
用户输入的数字、包括小数和负数,input()解析为字符串,再由eval()去掉字符串引号,将被直接解析为数字保存到变量中。
print()函数用于输出运算结果。
defprint(self,*args,sep='',end='\n',file=None):#knownspecialcaseofprint"""print(value,...,sep='',end='\n',file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.stdoutbydefault.Optionalkeywordarguments:file:afile-likeobject(stream);defaultstothecurrentsys.stdout.sep:stringinsertedbetweenvalues,defaultaspace.end:stringappendedafterthelastvalue,defaultanewline.flush:whethertoforciblyflushthestream."""passsep=''分隔符,默认为一个空格end='\n'结束符,默认以换行结束
print()函数的三种用法:
print(待输出字符串或变量)
对于字符串,print()函数输出后将出掉两侧引号,对于其它类型,则会直接输出。
当print()输出字符串表示时,字符串统一使用单引号表达。在[]中的字符串都使用了双引号,但是在被print()函数打印输出时,输出结果都采用了单引号。
print(变量1,变量2,......,变量N)
print(输出字符串模板.format(变量1,变量2,......,变量N))
print()函数输出的输出内容
'''可以输出数字int'''print(2)#2'''可以输出字符串str'''print('hello')#hello'''输出含有运算符的表达式'''print(2+3)#5print()函数输出的目的地
'''将内容输出到显示器'''print('hello,world')#hello,world'''将内容输出到文件'''#注意:所指定的盘符存在;使用file=fp;fp=open('E:\\text.txt','a')print('hello,world!',file=fp)fp.close()‘整数{}和整数{}的差是:{}’是输出字符串模板,也就是混合字符串输出的样式,大括号{}表示一个槽位,括号中的内容由后面紧跟着的format()方法中的参数按顺序填充。
就是反斜杠+想要实现的转义功能首字母。
为什么需要转义字符当字符串中包含反斜杠、单引号和双引号等有特殊用途的字符时,必须使用反斜杠对这些字符进行转义(转换一个含义)。
print('\\')#\print('\'')#'print('\"')#"当字符串中包含换行、回车,水平制表符或退格等无法直接表示的特殊字符时,也可以使用转义字符当字符串中包含换行、回车,水平制表符或退格等无法直接表示的特殊字符时,也可以使用转义字符。
#回车\rprint('hello\rhelloworld')#将hello覆盖#换行\nprint('hello\nworld')#退格\bprint('helloo\bworld')#水平制表\tprint('hello\tworld\t你好\t好')2.6.2原字符原字符:不希望字符串中的转义字符起作用,就使用原字符,就是在字符创之前加上
注意事项,最后一个字符不能是反斜线
#原字符:不希望字符串中的转义字符起作用,就使用原字符,就是在字符创之前加上r或R#注意事项,最后一个字符不能是反斜线print(r'hello\nword')#hello\nword三、运算符3.1数值运算操作符Python提供了9个基本的数值运算操作符。
所谓函数表现为对参数的特定运算。
'''算数运算符:加+减-乘*除/整除//取余%幂**'''print(-9//-4)#2print(9//4)#2print(-9//4)#-3一正一负整除公式,商取下整print(9//-4)#-3print(9%-4)#-3公式余数=被除数-除数*商9-(-4)*(-3)=-3print(-9%4)#3-9-4*(-3)=3#规律:规律就是取余数是负数结果就是负数3.4赋值运算符赋值运算符:运算顺序从右到左
'''赋值运算符:运算顺序从右到左=a=10+=a+=ba=a+b-=a-=ba=a-b*=a*ba=ab/=a/=ba=a/b//=a//=ba=a//b%a%=ba=a%b'''链式赋值,id相同
'''链式赋值,id相同'''a=b=c=20print(a,type(a),id(a))print(b,type(b),id(b))print(c,type(c),id(c))print('-------------------------')output:20
'''参数赋值'''a=20a+=30#a=a+30print(a)#50系列解包赋值
布尔类型用来表示真或假
Python中一切皆对象,所有对象都有一个布尔值,获取对象布尔值使用内置函数bool()
#Python中一切皆对象,所有对象都有一个布尔值#获取对象布尔值使用内置函数bool()'''以下对象布尔值为False:False数值0None空字符串''空列表[]空字典{}空元组()空集合{}'''print(bool(False))print(bool(0))print(bool(0.0))print(bool(None))print(bool(''))print(bool([]))#空列表print(bool(list()))print(bool({}))#空字典print(bool(dict()))print(bool(()))#空元组print(bool(tuple()))print(bool(set()))#空集合print('-------------以上对象bool值均为False------------')3.6比较运算符比较运算符:比较的值为True或False
''''>大于<小于==等于比较的是值:value!=不等于>=大于等于<=小于等于对象id的比较isisnot'''3.7位运算&|'''位运算符:位与&对应位数都是1,结果才为1,否则为0位或|对应位数都是0,结果才为0左移运算符<<高位溢出,低位补0右移运算符>>低位溢出,高位补0'''3.8逻辑运算符:andornotTrue和False二元数值构成了基本的真假逻辑,因此诞生了逻辑运算。
'''and且全真为真or或有真则真not非对bool类型操作数取反in在...里notin不在...里'''3.9运算符的优先级指数运算运算(最高优先级)**算数运算*///%+-位运算<<>>&|比较运算符><>=<=等于运算符==!=身份运算符isisnot成员运算符innotin逻辑运算符andornot四、流程控制4.1顺序结构程序按照线性顺序依次执行的一种运行方式。
例:把大象装冰箱分几步:
#把大象装冰箱分几步print('--------程序开始--------')print('1.把冰箱门打开')print('2.把大象装进冰箱')print('3.关上冰箱门')print('--------程序结束--------')4.2分支结构(选择结构)程序根据判断条件的布尔值选择性地执行部分代码明确的让计算机知道在什么条件下,该去做什么。
中文语义:如果......就......
if条件表达式:条件执行体if条件语句:判断一次,条件为True时执行一次
if条件表达式:条件执行体else:条件执行体2双分支结构if...else,二选一执行
语法结构:
if条件表达式:条件执行体elif条件表达式:条件执行体elif条件表达式:条件执行体elif条件表达式:条件执行体else:条件执行体例:从键盘录入一个整数成绩:90-100:A80-89:B70-79:C60-69:D0-59:E小于0或大于100不及格代码:
num=int(input('从键盘输入一个成绩:'))if90<=num<=100:print('A')elif80<=num<=89:print('B')elif70<=num<=79:print('C')elif60<=num<=69:print('D')elif0<=num<=59:print('E')else:print('不及格')4.2.4嵌套if的使用语法结构:
会员:>=2008折>=1009折<100不打折非会员:>=2009.5折<100不打折代码:
answer=input('您是会员吗y/n')money=float(input('请输入您的购物金额:'))#外层判断是否是会员ifanswer=='y':#会员ifmoney>=200:print('打8折,付款金额为:',money*0.8)elifmoney>=100:print('打9折,付款金额为:',money*0.9)else:print('不打折,付款金额为:',money)else:#非会员ifmoney>=200:print('打9.5折,付款金额为:',money*0.95)else:print('不打折,付款金额为:',money)4.2.5三元表达式语法结构:xif判断条件elsey
运算规则:如果判断条件的布尔值为True,条件表达式的返回值为x,否则条件表达式的返回值为False
#条件表达式xif判断条件elseya=int(input('请输入第一个整数:'))b=int(input('请输入第二个整数:'))'''ifa>=b:print(a,'>=',b)else:print(a,'<',b)'''#条件表达式print(str(a)+'小于'+str(b))ifa deffun(a,b):pass什么时候使用pass语句:先搭建语法结构,还没想好代码怎么写的时候。 pass语句与哪些语句一起使用: range():用于生成一个整数序列 #第一种创建方式range(stop)range(10)print(range(10))#range(0,10)返回值是一个迭代器对象默认从0开始,默认步长为1print(list(range(10)))#用于查看range对象中的整数序列list-->列表#第二种创建方式range(start,stop)print(range(0,10))#第三种创建方式range(start,stop,step)print(range(0,10,1))range()函数的返回值是一个迭代器对象 '''内置函数range(start(开始)未指定从0开始,stop(结束),step(步长)未指定步长为1)'''r=range(1,10,2)print(r)print(list(r))#列表[1,3,5,7,9]print(tuple(r))#元组(1,3,5,7,9)print(set(r))#字典{1,3,5,7,9}in与notin判断整数序列中是否存在(不存在)指定的整数 '''判断指定整数在序列中是否存在in,notin'''print(3inr)#Trueprint(4inr)#Falseprint(3notinr)#Falseprint(4notinr)#Trueforvalueinrange(10):print(value,end='')4.3.2遍历循环for-infor-in循环 for-in的语法结构 #forin循环#in表达是依次从(字符串,序列等)中依次取值,又称遍历#forin遍历对象必须是可迭代对象'''forin语法结构'''#for自定义变量in可迭代对象:#循环体foriin'hello':print(i,end='')print('')foriinrange(10):print(i,end='')print('')#在循环体中如果不需要使用到自定义变量,可将自定义变量写为下划线('_')for_inrange(3):#3表示次数print('hello')使用for循环计算1-100之间的偶数和 #使用for循环计算1-100之间的偶数和sum=0foriteminrange(101):ifitem%2==0:sum+=itemprint('1-100之间的偶数和为:',sum)输出100-999之间的水仙花数 '''输出100-999之间的水仙花数这个数的个位上的三次方+十位上的三次方+百位上的三次方=这个数'''foriteminrange(100,1000):ge=item%10shi=item%100//10#item//10%10bai=item//100ifitem==ge**3+shi**3+bai**3:print(item)4.3.3无限循环while语法结构: while条件表达式:条件执行体(循环体)四步循环法: 计算0-4之间的累加和 a=0#1.初始化变量s=0whilea<=4:#2.条件判断s+=a#3.条件执行体a+=1#4.改变变量print(s)#5.打印输出选择结构的if与循环结构while的区别 循环结构有两个辅助循环控制的保留字:break与continue。 break用来跳出最内层for或while循环,脱离该循环后程序继续执行循环后续代码,通常与分支结构if一起使用。 例:从键盘录入密码,最多录入三次,如果正确就结束循环 #for循环for_inrange(3):#range()函数可以用作for循环的循环次数3表示for执行了3次pwd='888'a=input('请输入密码:')ifa==pwd:print('密码正确')breakelse:print('密码错误,请重新输入密码')#while循环,四步循环法a=0whilea<3:'''条件执行体(循环体)'''b='888'pwd=input('请输入密码:')ifpwd==b:print('密码正确')breakelse:print('密码错误')a+=1continue语句用来结束当次循环,即跳出循环体中下面尚未执行的语句,但不跳出当前循环,进入下一次循环,通常与分支结构if一起使用 例:要求输出1-50-之间所有5的倍数 #for循环foriinrange(1,51):ifi%5==0:print(i)#while循环a=1whilea<=50:ifa%5==0:print(a)a+=1#continue语句foriteminrange(1,51):ifitem%5!=0:continueprint(item)4.3.5嵌套循环循环结构中又嵌套了另外的完整的循环结构,其中内层循环做为外层循环的循环体执行。 例1:打印一个三行四列矩形 for_inrange(3):for_inrange(4):print('-',end='\t')print()例2:输出乘法口诀表 列表类型用中括号[]表示,也可以通过list(x)函数将集合或字符串类型转换成列表类型。list()函数可生成空列表。 列表需要使用中括号[],元素之间使用英文的逗号进行分隔 lst=['hello','world','java']print(lst)lst2=list(['hello','world','java']+['hello','world','java'])print(lst2)lst=[iforiinrange(1,11)]print(lst)5.1.2列表的特点5.1.3列表的索引索引是列表的基本操作,用于获得列表第一个元素。该操作沿用序列类型的索引方式,即正向递增序号和反向递减序号,使用中括号作为索引操作符,索引序号不能超过列表的元素范围,否则会产生IndexErrorr的错误。获取列表中指定元素索引 语法:列表或列表变量.index('要获取索引的元素',起始位置,结束位置) 如果列表中含有相同元素,只返回相同元素的第一个元素的索引。 #如果列表中含有相同元素,只返回相同元素的第一个元素的索引lst=['hello','world','java','hello','world','java']print(lst.index('java'))#2print(lst.index('java',3,6))#5可以使用遍历循环对列表类型的元素进行遍历操作。 语法:for迭代变量in列表名: #列表元素的遍历lst=[10,20,30,40,50,60,70,80]foriinlst:print(i)output:10203040506070805.1.4列表的切片切片是列表的基本操作,用于获得列表的一个片段,即获得零个或多个元素。切片后的结果也是列表类型。切片有两种使用方式: 根据索引获取元素值 列表类型的一些常用操作方法: 代码: sort()方法 classlist(object):defsort(self,*args,**kwargs):#realsignatureunknown"""SortthelistinascendingorderandreturnNone.Thesortisin-place(i.e.thelistitselfismodified)andstable(i.e.theorderoftwoequalelementsismaintained).Ifakeyfunctionisgiven,applyitoncetoeachlistitemandsortthem,ascendingordescending,accordingtotheirfunctionvalues.Thereverseflagcanbesettosortindescendingorder."""pass按升序对列表进行排序,返回None。排序是原地的(即列表本身被修改)和稳定的(即保持两个相等元素的顺序)。如果给出了一个键函数,对每个列表项应用一次,并对它们进行排序,根据它们的函数值升序或降序。反向标志可以设置为降序排序。内置函数sorted() 列表生成式:简称列表生成的公式。 语法格式:lst=[列表元素表达式for自定义变量in可迭代对象]例:lst=[iforiinrange(1,11)] “键值对”是组织数据的一种重要方式,广泛应用在当代大型信息系统中,如Web系统。键值对的基本思想是将“值”信息关联一个“键”信息,进而通过键信息找对应的值信息,这个过程叫映射。Python语言中通过字典类型实现映射。 在python中创建一个字典对象,常用的方式有两种。 '''第一种方式,使用花括号{},语法如下所示使用{}创建字典scores={'张三':100,'李四':98,'王五':45}'''scores={'张三':29,'李四':10,'王五':40}print(scores)#{'张三':29,'李四':10,'王五':40}print(type(scores))# #1.使用[]获取scores={'张三':29,'李四':10,'王五':40}print('张三'inscores)#Trueprint('张三'notinscores)#Falseprint(scores['张三'])#29#2.使用get()方法print(scores.get('张三'))#29print(scores.get('柽柳'))#Noneprint(scores.get('麻子',99))#99是在查找麻子值的(value)不存在时的一个默认值5.2.6字典的操作函数Python内置数据结构:字典dict()类源代码: 字典类型有一些操作方法,使用的语法格式为:<字典对象名>.<方法名>(<方法参数>) scores={'张三':29,'李四':10,'王五':40} #key的判断scores={'张三':29,'李四':10,'王五':40}print('张三'inscores)#Trueprint('张三'notinscores)#True#字典元素的删除delscores['张三']#删除指定的键值对print(scores)#{'李四':10,'王五':40}#清空字典clear()方法scores.clear()print(scores)#{}#新增元素scores['陈六']=20print(scores)#{'陈六':20}#修改valuescores['陈六']=100print(scores)#{'陈六':100}5.2.9字典视图的获取#获取所有的键.keys()方法返回值为列表scores={'张三':29,'李四':10,'王五':40}print(scores.keys())#dict_keys(['张三','李四','王五'])print(type(scores.keys()))# 2.字典中元素是无序的 元组:Python内置的数据结构之一,是一个不可变序列。 不可变序列与可变序列 不变可变序列:没有增、删,改的操作 #修改后对象地址会发生改变s='hello'print(id(s))#2533879685808s=s+'world'print(id(s))#2533879671984print(s)#helloworld可变序列:可以对序列执行增、删、改操作,对象地址不发生更改 #1.使用()t=('python','java')print(t)#('python','java')print(type(t))# 在多任务环境下,同时操作对象时不需要加锁,因此,在程序中尽量使用不可变序列。注意事项:元组中存储的是对象的引用 这样设计的原因是,元组的不可变性保证了数据的完整性,这样如果有多个地方都用到了元组,我们可以保证它的数据不会被改变。并且,相较于列表,元组的读取速度更快,占用的内存空间更小,并且可以作为字典的key去使用。 #这样设计的原因是,元组的不可变性保证了数据的完整性,这样如果有多个地方都用到了元组,我们可以保证它的数据不会被改变。#并且,相较于列表,元组的读取速度更快,占用的内存空间更小,并且可以作为字典的key去使用。t=(10,[20,30],40)print(t)#(10,[20,30],40)print(type(t),id(t))# 什么是集合 多行字符串由一对三单引号''''''或三双引号""""""作为边界来表示,二者作用相同。 Python的驻留机制会对相同的字符串只保留一份拷贝,后续创建相同的字符串时,不会开辟新的空间,而是把字符串的地址付给新创建的变量。 >>>s1=''>>>s2=''>>>s1iss2True>>>>>>s1='a'>>>s2='a'>>>s1iss2True>>>>>>s1='abc_def'>>>s2='abc_def'>>>s1iss2True>>>s1='abc%def'>>>s2='abc%def'>>>s1==s2True>>>s1iss2False>>>>>>a=256>>>b=256>>>aisbTrue>>>a=257>>>b=257>>>aisbFalse>>>a==bTrue>>>6.1.4强制2个字符串指向同一个对象sys中的intern方法强制两个字符串指向同一个对象'''sys中的intern方法强制两个字符串指向同一个对象'''importsysa='abc%'b='abc%'print(aisb)#Truea=sys.intern(b)print(id(a),id(b))#29899052305122989905230512PyCharm对字符串进行了优化处理。 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。 语法如下: 编码:s.encode()将字符串转换为二进制数据(bytes)解码:s.decode()将bytes类型的数据转换成字符串类型 语法格式: def函数名([参数列表]):函数体return返回值列表例: 函数名(实际赋值参数列表)#函数创建defcalc(a,b):#函数定义c=a+breturnc'''函数调用:函数名(实际参数列表)'''d=calc(10,20)#函数调用print(d)#307.3函数的参数传递函数的参数在定义时可以指定默认值,当函数被调用时,如果没人传入对应的参数时,则使用函数定义时的默认值替代。语法格式 在函数调用过程中,进行参的传递: 在一个函数的定义过程中,既有个数可变的*arges位置形参,又有个数可变的**kwargs关键字形参,要求把位置形参放在前面 函数的返回值 函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命名供其他程序使用。函数封装的直接好处是代码复用,任何其他代码只要输入参数即可调用函数,从而避免相同功能的代码在被调用处重复编写。代码复用有另一个好处,当更新函数功能时,所有被调用处的功能都被更新。 程序由一系列代码组成,如果代码是顺序但无组织的,不仅不利于阅读和理解,也很难进行升级和维护。当程序长度在百行以上,如果不划分模块,程序的可读性就已经很糟糕了。解决这一问题最好的方法是将一个程序分割成短小的程序段,每一段程序完成一个小的功能。使用函数对合理划分为功能模块,并基于模块设计程序是一种常用方法,被称为“模块化设计”。 模块化设计是指函数的封装功能将程序划分成主程序、子程序和子程序间关系的表达。模块化设计是使用函数设计的思考方法,以功能块为基本单位,一般有两个基本要求: 使用函数只是模块化设计的必要非充分条件,根据计算需求合理划分函数十分重要。一般来说,完成特定功能或被经常复用的一组语句应该采用函数来封装,并尽可能减少函数间参数和返回值的数量。 #1.使用递归函数计算阶乘deffun(n):#阶乘函数ifn==1:return1elifn==2:return2else:returnn*fun(n-1)print(fun(6))#720#2.斐波那契数列11235813...deffib(n):#斐波那契函数ifn==1:return1elifn==2:return1else:returnfib(n-1)+fib(n-2)#求斐波那契数列的第n项print(fib(6),end='')#8八、异常处理机制Python程序一般对输入有一定要求,但当实际输入不满足程序要求时,可能会产生程序的运行错误。8.1Bub的由来及分类8.1.1Bug的由来世界上第一部万用计算机的进化版-马克2号(MarkII)1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。” 从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)。 除零异常 先看一段代码: 进入调试视图的三种方式: (3)快捷键:shift+F9 共同点:面向过程和面向对象都是解决实际问题的一种思维方式 二者相辅相成,并不是独立的,解决复杂问题,通过面向对象便于我们从宏观上把握事物之间复杂关系,方便我们分析整个系统;具体到微观操作,仍然使用面向过程来处理 数据类型:1.不同数据类型属于不同的类2.使用内置函数type查看数据类型 创建类的语法: class类名:pass类的组成: 类的创建: 语法: 代码实现: 语法格式: class子类名(父类1,父类2,...):pass代码实现: 子类重写后的方法通过super().方法名()调用父类中被重写的方法。 定义子类时,必须在其构造函数中调用父类的构造函数 #-*-coding:utf-8-*-#@File:demo.py#@author:Flymeawei#@email:Flymeawei@163.com#@Time:2022/8/1523:27#多继承classA(object):passclassB(object):passclassC(A,B):pass10.3多态多态:多态就是具有多种形态,即便不知道一个变量所引用的对象是什么类型,仍然可以使用这个变量调用方法,在运行过程中根据变量所引用的对象类型,动态决定调用那个对象中的方法。代码实现: 动态语言与静态语言 静态语言和动态语言关于多态的区别: 赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。 **浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变)** 哪些是浅拷贝: 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象。 1.模块:英文名modules 2.在Python中一个拓展名为.py的文件就是一个模块 3.函数与模块的关系: 4.使用模块的好处: #-*-coding:utf-8-*-#@File:demo.py#@author:Flymeawei#@email:Flymeawei@163.com#@Time:2022/8/1611:58deffun():#函数passclassStudent:#类a='hello'#类属性def__init__(self,name):#初始化方法self.name_=name#实例属性def__str__(self):#实例方法pass@staticmethoddefcm():print('静态方法')@classmethoddefcs(cls):print('类方法')a=10#变量b=20c=a+b#语句11.1.2导入模块创建模块: 导入模块: import模块名称as别名#导入模块中所有的from模块名称import函数/变量/类#导入模块的指定内容代码实现: #-*-coding:utf-8-*-#@author:Flymeawei#@email:Flymeawei@163.com#@Time:2022/8/1611:58importmath#导入关于数学运算的模块print(id(math))print(type(math))#moduleprint(math)print('----------------')print(math.pi)#3.14...print(dir(math))print(math.pow(2,3))#幂2**3=8print(math.e)print(math.ceil(9.435))#取上整print(math.floor(9.35))#取下整print(math.log(2,4))frommathimportpi#导入模块指定的内容print(pi)11.1.3导入自定义模块自定义模块calc #-*-coding:utf-8-*-#@File:calc.py#@author:Flymeawei#@email:Flymeawei@163.com#@Time:2022/8/1611:58defadd(a,b):returna+bdefdiv(a,b):returna/b导入自定义模块calc 如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行。 顶级模块__name__变量的值为__main__ 语句: if__name__='__main__':pass自定义模块calc2 #-*-coding:utf-8-*-#@File:calc2.py#@author:Flymeawei#@email:Flymeawei@163.com#@Time:2022/8/1611:58defadd(a,b):returna+bif__name__=='__main__':print(add(10,20))#只有当点击运行calc2模块时,才会执行运算导入calc2模块 1.包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下 2.包的作用: 3.包与目录的区别: 4.包的导入:import包名.模块名 module_A模块 #-*-coding:utf-8-*-#@File:module_A.py#@author:Flymeawei#@email:Flymeawei@163.com#@Time:2022/8/1611:58#包的导入a=10module_B模块 #-*-coding:utf-8-*-#@File:module_B.py#@author:Flymeawei#@email:Flymeawei@163.com#@Time:2022/8/1611:58b=100导入包package1 '''包的导入import包名.模块名'''importpackage1.module_Aasma#导入包package1中的module_A模块print(ma.a)#10导入带有包的模块注意事项 提供访问操作系统服务功能的标准库 pipinstall模块名 import模块名 常见的字符编码格式 .py文件放在磁盘上使用UTF—8储存(外存)UTF-8变长编码:UTF-8是Unicode的实现,1-4个字节表示一个字符,英文1个字节,汉字3个字节。 新建demo1.py文件 文件操作原理 内置函数open()创建文件对象 语法规则 3.文件读写操作.py文件 1.文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可以使用记事本程序打开 2.二进制文件:把数据内容以字节进行存储,无法用记事本打开,必须使用专用的文软件打开,举例:MP3音频文件JPG图片.doc文档等 常用的文件打开模式 '''打开模式描述---------------------------------------------------------------------------------------------------r以只读模式打开文件,文件的指针将会放在文件的开头w以只写方式打开文件,如果文件不存在就创建,如果文件存在则覆盖原有内容,文件指针放在开头a以追加模式打开文件,如果文件不存在则创建,文件指针在开头,如果文件存在,则在文件末尾追加内容,文件指针在原文末尾b以二进制方式打开文件,不能单独使用,需要与其它模式一起使用,rb,或者wb+以读写方式打开文件,不能单独使用,需要与其它模式一起使用'''代码演示: file.close() """方法名说明----------------------------------------------------------------------------------------1.read([size])从文件中读取size个字节或字符返回,若省略[size]则读到文件末尾2.readline()从文本中读取一行内容3.readlines()把文本文件中每一行都作为独立的字符串对象,并将这些对象放回列表返回4.write(str)将字符串内容写进文件5.writelines(s_list)将字符串列表s_list写入文本文件,不添加换行符6.seek(offset,whence)把文件指针移到新的位置,offset表示相对whence的位置:offset:为正往结束方向移动,whence不同的值呆鸟不同的含义:0:从文件开头开始计算1:从文件当前位置开始计算2:从文件结尾开始计算7.tell()返回文件指针当前位置8.flush()把缓冲区的内容写入文件,但不关闭文件9.close()把缓冲区内容写入文件,同事关闭文件,释放文件对象资源"""12.6with上下文管理with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正常关闭,以此来达到释放资源的目的