欢迎光临散文网 会员登陆 & 注册

python编辑的一些基础

2023-07-13 00:38 作者:懒咧  | 我要投稿

print函数可以输入字符串,数字,和表达式


print('hello world')


print(10)


print(10*9)


#将数据输出文件中,注意点,1.所指定的盘符在存在,2.使用file=fp


fp=open'D:/text.txt','a+')#a+如果文件不存在就创建,存在就在文件内容的后面继续追加


print('helloworld',file=fp)


fp.close()


转义字符


\n换行


\t水平制表,(跳到下一个Tab的为位置)


\b退格


\r 回车,将单签位置移到本行开头


\?代表一个问号


\空字符


\\代表一个反斜杠字符'\'


\'代表一个单引号


\"代表一个双引号字符


原字符,不希望字符串中的转义字符起作用。就使用原字符,就是在字符串之前加上r,或R


注意事项,最后一个字符不能是反斜杠


保留字查看


我的保留字:有一些单词被我赋予了特定的意义,


这些单词你在给你的任何对象起名字的时候都不能用


import keyword


print(keyword.kwlist)


我的规则你必须要知道


·变量、函数、类、模块和其它对象的起的名字就叫标识符


·规则:


    ·宇母、数宇、下划线


·不能以数字开头


·不能是我的保留字


·我是严格区分大小写的


变量的定义和使用


变量由三部分组成


标识:表示对象所存储的内存地址,使用内置函数id(obj)来获取


类型:表示的是对象的数据类型,使用内置函数type(obj)来获取


值:表示对象所存储的具体数据,使用print(obj)可以将值进行打印输出


当多次赋值之后,变量名会指向新的空间


数据类型


常用的数据类型


整数类型 ——>int ——>98


浮点数类型——>float——>3.14159


布尔类型——>bool——>True,False


字符串类型——>str——>'人声苦短,我永Python'


数据可以表示为二进制,十进制,八进制,十六进制


print('十进制',118)


print('二进制',0b10101111)


print('八进制',0o176)八进制以0o开头


print('十六进制'0x1EAF)


浮点类型


浮点数整数部分和小数部分组成


浮点数存储不精确性


使用浮点数进行计算时,可能会出现小数位数不确定的情况


布尔类型


用来表示真或假的值


True表示真,False表示假


布尔值可以转化为整数


True——>1


False——>0


字符串类型


字符串又称为不可变的字符序列


可以使用单引号''双引号""三引号''' '''或""" """来定义


单引号和双引号定义的字符串必须在一行


三引号定义的字符串可以分布在连续的多行


Python中的注释


注释


·在代码中对代码的功能进行解释说明的标注性文字,


可以提高代码的可读性


·注释的内容会被Python解释器忽略


·通常包括三种类型的注释


·单行注释——〉以“#”开头,直到换行结束


·多行注释——>并没有单独的多行注释标记,将一对三引号之间的代码称为多行注释


·中文编码声明注释——>在文件开头加上中文声明注释,用以指定源码文件的编码格式


''' 多行注释'''


算术运算符


+加法运算


-减法运算


*乘法运算


/除法运算


//整除运算


一正一负向下取整 


%


(有负数)求余  余数=被除数-除数*商


赋值运算符


+=,-=,*=,/=,//=,%=


支持系列解包赋值


a,b,c=20,30,40


比较运算符,比较运算符的结果为bool类型


比较对象的表示使用is


比如a=10 id=120


b=10 id=120


a is b    true


is not表示a与b的标识id不相等所以false


a is not b 为false


布尔运算符


and并且      有一个false就为false


or或者 有一个true就是true


not 对bool类型操作数取反


in 与not in


s='helloworld'


print('w' in s)w在s的变量的字符串里是对的


print('k' in s)k不在s变量的字符串里是错的


print('w' not in s)False


print('k'not in s)k不在s变量的字符串里就是对的


位运算符


将数据转成二进制进行计算


位与&,对应数位都是1,结果数位才是1,否则为0


位或|,对应数位都是0,结果数位才是0,否则为1


左移位运算符<<,高位溢出舍弃,低位补0


右移位运算符>>,低位溢出舍弃,高位补0


print(4<<1)向左移动一位相当于乘以2


print(4>>2)向右移动2位相当于除以4 


Python中的运算符


运算符优先级


先是算术运算符


后是位运算,再后是比较运算符,布尔运算符


顺序结构


程序从上到下顺序地执行代码,中间没有任何的判断和跳转,直到程序结束


对象的布尔值


Python一切皆对象,所有对象都有一个布尔值


获取对象的布尔值


使用内置函数bool()


以下对象的布尔值为False


False


数值0


None


空字符串


空列表


空元组


空字典


空集合


单分支结构


语法结构


if 条件表达式:


条件执行体


双分支结构


if 条件表达式:


条件执行体


else 条件表达式:


条件执行体


if 条件表达式1:


条件执行体1


elif 条件表达式2:


条件执行体2


elif 条件表达式N:


条件执行体N


[else:]


条件表达式N+1


嵌套if


语法结构:


if条件表达式1:


if内层条件表达式:


内层条件执行体1


else:


内存条件执行体2


else:


条件执行体


条件表达式


条件表达式是if......else的简写


语法结构:


x if    判断条件 else y


运算规则


如果判断条件的布尔值为True。条件表达式的返回值为x。否则条件表达式的返回值为False


pass语句


pass语句


语句什么都不做,只是一个占位符,用在语法上需要语句的地方


什么时候使用:


先搭建语法结构,还没想好代码怎么写的时候


哪些语句一起使用


if语句的条件执行体


for-in语句的循环体


定义函数时的函数体


内置函数range()


创建range对象的三种方式


range(stop)——>创建一个(0,stop)之间的整数序列,步长为1


range(start,stop)——>创建一个[start,stop)之间的整数序列,步长为1


range(start,stop,step)——>创建一个[start,stop)之间的整数序列,步长为step


range类型的优点:不管range对象表示的整数序列有多长,所有range对象占用的


内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,


才会去计算序列中的相关元素


循环结构


反复做同一件事情的情况,称为循环


循环结构的流程图


循环的分类


while


for -in


语法结构


while 条件表达式:


条件执行体(循环体)


选择结构的if与循环结构while的区别


If是判断一次,条件为True执行一行


while是判断N+1次,条件为True执行N次


for-in循环


in表达从(字符串、序列等)中依次取值,又称为遍历


for-in遍历的对象必须是可迭代对象


for-in的语法结构


for自定义的变量in可迭代对象:循环体


for-in的执行图


循环体内不需要访问自定义变量,可以将自定义变量替代为下划线


 流程控制语句break


break语句用于结束循环结构,通常与分支结构if一起使用


流程控制语句continue


continue语句


勇于结束当前循环,进入下一次循环,通常与分支结构中的if一起使用


列表


为什么需要列表


变量可以存储一个元素,而列表是一个"大容器"可以存储N多个元素,


程序可以方便地对这些数据进行整体操作


列表相当于其他语言中的数组


列表的创建


列表需要使用中括号[]元素之间使用英文的逗号进行分隔


列表的创建方式


使用中括号


使用内置函数list()


lst=['大圣','额额']


lst2=(['大圣','额额'])


列表的特点


列表元素按顺序有序排序


索引映射唯一个数据


列表可以存储重复数据


任意数据类型混存


根据需要动态分配和回收内存


列表的查询操作


获取列表中指定元素的索引


index()如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引


如果查询的元素在列表中不存在,则会抛出ValueError


还可以在指定的start和stop之间进行查找


获取列表中的单个元素获取单个元素


正向索引从0到N-1   举例:lst[0]


逆向索引从-N到-1   举例:lst[-N]


指定索引不存在,则抛出IndexError


获取元素的查询操作


获取列表中的多个元素


语法格式


列表名[start:stop:step]


切片的结果——>原列表片段的拷贝


切片的范围[start,stop]


step默认为1——>简写为[start:stop]


step为正数[:stop:step]切片的第一个元素默认是列表的第一个元素 从start开始往后计算切片


step为正数[stop::step]切片的最后一个元素默认是列表的最后一个元素 从start开始往后计算切片


step为负数[:stop:step]切片的第一个元素默认是列表的最后一个元素 从start开始往前计算切片


step为负数[stop::step]切片的最后一个元素默认是列表的第一个元素 从start开始往前计算切片


列表元素的查询操作


判断指定元素在列表中是否存在


元素 in 列表名


元素 not in 列表名


列表元素的遍历


for 迭代遍历 in 列表名:


列表元素的增加操作


列表元素的增加操作


append()在列表的末尾添加一个元素


extend()在列表的末尾至少添加一个元素


insert()在列表的任意位置添加一个元素


切片在列表的任意位置添加至少一个元素


列表元素的删除操作


列表元素的删除操作


remove()


一次删除一个元素


重复元素只删除第一个


元素不存在抛出ValueError


pop()


删除一个指定索引位置上的元素


指定索引不存在抛出IndeError


不知道索引,删除列表中最后一个元素


切片 一次至少删除一个元素


clear()清空列表中的所有元素


del 删除列表


列表元素的修改操作


列表元素的修改操作


为指定索引的元素赋予一个新值


为指定的切片赋予一个新值


列表元素的排序操作


常见的两种方式


用sort()方法,列有中的所有元素默认按照从小到大的顺序进行排序


,可以指定reverse=True进行降序排序


调用内置函数sorted(),可以指定reverse=True,进行降序排序,


生成一个新的列表对象,原列表不发生改变


列表生成式


列表生成式简称"生成列表的公式"


语法格式:


i*i for i in range(1,10)


注意事项:"表示列表元素的表达式"中通常包含自定义变量


列表中的元素的值为2,4,6,8,10


lst2=[i*2 for i in range(1,6)]


print(lst2)


字典


Python内置的数据结构之一,与列表一样是一个可变序列


以键值对的方式存储数据,字典是一个无序的序列


字典的实现原理


字典的实现原理与查字典类似,查字典是先根据部首或拼音查找


应的页码,Python中的字典是根据key查找value所在的位置


字典的创建


字典的创建


最常用的方式:使用花括号


scores{'张三':100,'李四':98,'王五':45}


使用内置函数dict()


dict(name='jack',age=20)


[]取值与使用get()取值的区别


[]如果字典中不存在指定的key,抛出keyError异常


get()方法取值,如果字典中不存在指定的key,并不会抛出KeyError而是返回None


,可以通过参数设置默认的value,以便指定的key不存在时返回


字典的常用操作


key的判断


key的判断


in 指定的key在字典中存在返回True——>'张三'in scores


not in 指定的key在字典中不存在返回True——>'Marry' not in scores


字典元素的删除


del scores['张三']


字典元素的新增


scores['Jack']=90


字典的常用操作


获取字典视图的三个方法


获取字典视图


keys()——>获取字典中所有key


values()——>获取字典中所有value


items()——>获取字典中所有key,value对


字典的常用操作


字典元素的遍历


for item in scores:


print(item)


字典的特点


字典中的所有元素都是一个key-value对,key不允许重复,value可以重复


字典中的元素是无序的


字典中的key必须是不可变对象


字典也可以根据需要动态地伸缩


字典会浪费较大的内存,是一种使用空间换时间的数据结构


字典生成式


内置函数zip()


用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,


然后返回由这些元组组成的列表


items=['Fruits','Books','0thers'] 


prices=[96,78,85]


d={item.upper():price for item,price in zip(items,prices)}


print(d)


什么是元组


元组


·Python内置的数据结构之一,是一个不可变序列


不可变序列与可变序列


不变可变序:字符串、元组


不变可变序列:没有增、删,改的操作


可变序列:列表、字典


可变序列:可以对序列执行增、删、改操作,对象地址不发生更改


元组的创建方式


元组的创建方式


直接小括号t=(Python;‘hello',90)


使用内置函数tuple()


t=tuple((“Python',hello',90))·


只包含一个元组的元素需要使用逗号和小括号


t=(10,)


为什么要将元组设计成不可变序列


为什么要将元组设计成不可变序列


在多任务环境下,同时操作对象时不需要加锁


因此,在程序中尽量使用不可变序列


·注意事项:元组中存储的是对象的引用


a)如果元组中对象本身不可对象,则不能再引用其它对象


b)如果元组中的对象是可变对象,则可变对象的引用不允许


改变,但数据可以改变


元组的遍历


·元组是可迭代对象,所以可以使用for..in进行遍历


t=('Python','world',98)


for item in t:


print(item)


什么是集合


集合


·Python语言提供的内置数据结构


·与列表、字典样都属于可变类型的序列


·集合是没有value的字典


集合的创建方式


集合的创建方式


直接{}


s={'world','hello',90}


使用内置函数set()


集合中的元素不允许重复


集合中的元素是无序的


集合的相关操作


集合元素的判断操作


in或not in


集合元素的新增操作


调用add()方法,一次添中一个元素


调用update()方法至少添加一个元素


集合元素的删除操作


调用remove()方法,一次删除一个指定元素,如果指定的元素不存在抛出


KeyError


调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不抛出异常


调用pop()方法,一次只删除一个任意元素


调用clear()方法,清空集合


集合间的关系


两个集合是否相等


可以使用运算符==或!=进行判断


一个集合是否是另一个集合的子集


可以调用方法issubset进行判断


B是A的子集


一个集合是否是另一个集合的超集


可以调用方法issuperset进行判断


A是B的超集


两个集合是否没有交集


可以调用方法isdisjoint进行判断


intersection()与&等价,交集操作


union与|等价,并集操作


difference与-等价,差集操作


symmetric_difference与^符号等价,对称差集操作


列表生成式


lst=[i*i for i in range(6)]


print(lst)


集合生成式


s={i*I for i in range(6)}


print(s)


字符串的驻留机制


字符串


在Python中字符串是基本数据类型,是一个不可变的字符序列


什么叫字符串驻留机制呢?


仅保存一份相同且不可变字符串的方法,


不同的值被存放在字符串的驻留池中,


Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,


不会开辟新空间,而是把该字符串的地址赋给新创建的变量


字符串的驻留机制


驻留机制的几种情况(交互模式)


字符串的长度为0或1时


符合标识符的字符串


字符串只在编译时进行驻留,而非运行


时[-5,256]之间的整数数字


sys中的intern方法强制2个字符串指向同一个对象


PyCharm对字符串进行了优化处理


字符串驻留机制的优缺点


·当需要值相同的字符串时,


可以直接从字符串池里拿来使用,


避免频繁的创建和销毁,提升效率和节约内存,


因此拼接字符串和修改字符串是会比较影响性能的。


在需要进行字符串拼接时建议使用str类型的join方法,


而非+,因为join()方法是先计算出所有字符中的长度,


然后再拷贝,只new一次对象,效率要比"+”效率高


字符串的查询操作的方法


查询方法


index() 查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError


rindex()查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError


find()查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1


rfind()查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1


·字符串的大小写转换操作的方法


大小写转换


upper()把字符串中所有字符都转成大写字母  转换成大写之后会产生一个新的字符串对象


lower()把字符串中所有字符都转成小写字母  转换成小写之后会产生一个新的字符串对象


swapcase()把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母


capitalize()把第一个字符转换为大写,把其余字符转换为小写


title()把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写


字符串的常用操作


·字符串内容对齐操作的方法


字符串对齐


center()


居中对齐,第1个参数指定宽度,第2个参数指定填充符,


第2个参数是可选的,默认是空格


,如果设置宽度小于实际宽度则则返回原字符串


ljust()


左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,


默认是空格如果设置宽度小于实际宽度则则返回原字符串


rjust()


右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,


默认是空格如果设置宽度小于实际宽度则则返回原字符串


zfill()


右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,


如果指定的宽度小于等于字符串的长度,返回字符串本身


字符串劈分操作的方法


字符串的劈分


split()


从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表


以通过参数sep指定劈分字符串是的劈分符


通过参数maxsplit指定劈分字符串时的最大劈分次数,


在经过最大次劈分之后,剩余的子串会单独做为一部分


rsplit()


从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表


以通过参数sep指定劈分字符串是的劈分符


通过参数maxsplit指定劈分字符串时的最大劈分次数,


在经过最大次劈分之后,剩余的子串会单独做为一部分


判断字符串操作的方法


判断字符串的方法


isidentifier()判断指定的字符串是不是合法的标识符


isspace()判断指定的字符串是否全部由空白字符组成(回车、换行,水平制表符)


isalpha()判断指定的字符串是否全部由字母组成


isdecimal()判断指定字符串是否全部由十进制的数字组成


isnumeric()判断指定的字符串是否全部由数字组成


isalnum()判断指定字符串是否全部由字母和数字组成


字符串操作的其它方法


字符串替换


replace()作用:


第1个参数指定被替换的子串,


第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,


替换前的字符串不发生变化,


调用该方法时可以通过第3个参数指定最大替换次数


字符串的合并


join()


将列表或元组中的字符串合并成一个字符串


字符串的比较操作


运算符:>,>=,<,<=,==,!=


比较规则:首先比较两个字符串中的第一个字符,


如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,


其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较


比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),


调用内置函数ord可以得到指定字符的ordinal value。


与内置函数ord对应的是内置函数chr,


调用内置函数chr时指定ordinal value可以得到其对应的字符


字符串的切片操作


字符串是不可变类型


·不具备增、删、改等操作


·切片操作将产生新的对象


s='hello,Python'


s1=s[:5]由于没有指定起始位置,所以从0开始切


s2=s[6:]由于没有指定结束位置,所以切到字符串最后一个元素


s3='!'


newstr=s1+s3+s2


切片操作[start:end:step]


print(s[1:5:1])#从1开始截到5(不包含5),步长为1


print(s[::2])#默认从0开始,没有写结束,默认到字符串的最后一个元素,步长为2,两个元素之间的索引间隔为2


print(s[::-1])#默认从字符串的最后一个元素开始,到字符串的第一个元素结束,因为步长为负数


print(s[-6::1])#从素引为-6开始,到宁符串的最后一个元素结束,步长为1


格式化字符串


格式化字符串的两种方式


%作占位符


print(’我叫%s,今年%d岁’%(name,age))


{}作占位符


print'我叫{0},今年{1}岁’.format(name,age))


f-string


print(f'我叫{name},今年{age}岁')


%d是指宽度例如print('%10d'% 99) 10表示宽度


%f是表示保留小数,print('%.3f'%3.1415926)   .3表示是小数点后三位


同时表示宽度和精度


print('%10.3f' %3.1415926) 一共总宽度为10,小数点后3位


print('{0:.3}'.format(3.1415926))#.3表示的是一共是3位数


print'{0.3f}'.format(3.1415926))#.3f表示是3位小数


print({:10.3f)'.format(3.1415926))#同时设置宽度和精度,一共是10位,3位是小数


字符串的编码转换


·为什么需要字符串的编码转换


编码与解码的方式


·编码:将字符串转换为二进制数据(bytes)


·解码:将bytes类型的数据转换成字符串类型


s='天涯共此时’


#编码


print(s.encode(encoding='GBK'))#在GBK这种编码格中一个中文占两个字节


print(s.encode(encoding='UTF-8'))#在UTF-8这种编辑格式中,一个中文占三个字节


#解码 


#byte代表就是一个二进制数据(字节类型的数据)


 byte=s.encode(ncoding='GBK')#偏码


 print(byte,decode(encoding='GBK'))#解码


byte=s.encode(encoding='UTF-8') 


print(byte.decode(encoding='UTF-8'))


函数


什么是函数


函数就是执行特定任和以完成特定功能的一段代码


    为什么需要


函数


·复用代码


·隐藏实现细节


·提高可维护性


·提高可读性便于调试


函数的创建


def 函数名([输入参数]):


    函数体


[return xxx]


函数的返回值


函数返回多个值时,结果为元组


函数的返回值


(1)如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】return可以省略不写


(2)函数的返回值,如果是1个,直接返回类型


(3)函数的返回值,如果是多个,返回的结果为元组


函数在定义时,是否需要返回值,视情况而定


函数的参数定义


函数定义默认值参数


·函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参


函数的参数定义


个数可变的位置参数


定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的


位置参数


使用*定义个数可变的位置形参


结果为一个元组


个数可变的关键字形参


定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关


键字形参


使用**定义个数可变的关键字形参


结果为一个字典


函数个数可变的位置参数,只能是1个


个数可变的关键字参数,只能是1个


在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,


要求,个数可变的位置形参,放在个数可变的关键字形参之前


变量的作用域


变量的作用域


·程序代码能访问该变量的区域


·根据变量的有效范围可分为


·局部变量


·在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会就成全局变量


全局变量


·函数体外定义的变量,可作用于函数内外


global age #函数内部定义的变量,局部变量,局部变量使用global声明,这个变量实际上就变成了全局变量


递归函数


什么是递归函数


·如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数


递归的组成部分


·递归调用与递归终止条件


递归的调用过程


·每递归调用一次函数,都会在栈内存分配一个栈帧,


·每执行完一次函数,都会释放相应的空间


递归的优缺点


·缺点:占用内存多,效率低下


·优点:思路和代码简单


Bug的由来


·世界上第一部万用计算机的进化版-马克2号(Mark I)


Bug的常见类型


·粗心导致错误的自查宝典


1.漏了末尾的冒号,如if语句,循环语句,else子句等


2.缩进错误,该缩进的没缩进,不该缩进的瞎缩进


3.把英文符号写成中文符号,比如说:引号,冒号,括号


4.字符串拼接的时候,把字符串和数字拼在一起


5.没有定义变量,比如说while的循环条件的变量


6.“=="比较运算符和”=”赋值运算符的混用


Bug的常见类型


·被动掉坑问题的解决方案


·Python提供了异常处理机制,可以在异常出现时即


时捕获,然后内部“消化”,让程序继续运行


异常处理


try:


代码块


except:


输出语句


Python的异常处理机制


·多个except结构·捕获异常的顺序按照先子类后父亲类的顺序,


为了避免遗漏可能出现的异常,可以在最后增加BaseException


try...except...else结构


·如果try块中没有抛出异常,则执行else块,


如果try中抛出异常except块


try...except...else...finally结构


finally块无论是否发生异常都会被执行,


能常用来释放try块中申请的资源


Python中常见的异常类型


异常类型                         描述


ZeroDivisionError          除(或取模)零(所有数据类型)


IndexError                      序列中没有此索引( index)


KeyError                         映射中没有这个键


NameError                     未声明/初始化对象(没有属性)


SyntaxError                    Python 语法错误


ValueError                      传入无效的参数


traceback模块


使用traceback模块打印异常信息


traceback.print_exc()


断点程序运行到此处,暂时挂起,停止执行。


此时可以详细观察程序的运行情况,方便做出进一步的判断


进入调试视图进入调试视图的三种方式


(1)单击工具栏上的按钮卷


(2)右键单击编辑区:点击: debug'模块名


(3)快捷键: shift+F9


·类是多个类似事物组成的群体的统称。


能够帮助我们快速理解和判断事物的性质


·数据类型


·不同的数据类型属于不同的类


·使用内置函数查看数据类型


·对象·100、99、520都是int类之下包含的相似的不同个例,


这个个例专业数语称为实例或对象


类的创建


class 类名:#类名每个单词的首字母大写,其余小写


pass


类的组成


·类属性#直接写在类里的变量称为类属性


·实例方法


def eat(self)


print('实力方法括号要写self')


·静态方法


@staticmethod


def method():


print('')


·类方法


@classmethod


def cm(cls):


print('类方法')


在类之外定义的称为函数,在类之内定义的称为方法


静态方法


@staticmethod


@classmethod


def init (self, name, age):


self.name=name #se1f.name称为实体属性个赋值的操作


,将局部变量的name的值赋给实体属性


self. age=age


对象的创建


对象的创建又称为类的实体化


语法:


实体名=类名


例子:


#创建 Student类的实例对象


stu=Student('Jack', 20) 


print(stu.name)#实例属性 


print(stu.age)#实例属性 


stu. info()实例方法


意义:有了实例,就可以调用类中的内容


类属性、类方法、静态方法


类属性:类中方法外的变量称为类属性,被该类的所有对象所共享


类方法:使用@ classmethod修饰的方法,使用类名直接访问的方法


静态方法:使用@ staticmethod修饰的主法,使用类名直接访问的方法


动态绑定属性和方法


Python是动态语言,在创建对象之后,可以动态地绑定属性和方法


def show():


print('我是一函数')


 stu=Student('Jack', 20)


stu. gender=男#态绑定性别


print(stu. name, stu age, stu gender)


stu.show=show#动态绑定方法


stu show()


面向对象的三大特征


封装:提高程序的安全性·将数据(属性)和行为(方法)包装到类对象中。


在方法内部对属性进行操作,在类对象的外部调用方法。


这样无需关心方法内部的具体实现细节,从而隔离了复杂度在 Python中没有


专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,


前边使用两个“”。


继承:提高代码的复用性


多态:提高程序的可扩展性和可维护性


self.__age=age#年龄不希望在类的外部被使用,所以加了两个_


stu.show()


#在类的外使用使用name与age


print(stu._Student__age)#在类的外部可以通过_Student__age


继承


语法格式


    class子类类名(父类1,父类2..):


    pass


如果一个类没有继承任何类,则默认继承 object


Python支持多继承


定义子类时,必须在其构造函数中调用父类的构造函数


方法重写


如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写


子类重写后的方法中可以通过super(.Xx)调用父类中被重写的方法


object类


object类是所有类的父类,因此所有类都有 object类的属性和方法


内置函数dir()可以查看指定对象所有属性


Object有一个st(方法,用于返回一个对于"对象的描述",


对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,


所以我们经常会对__str__()进行重写


多态


简单地说,多态就是“具有多种形态”,它指的是:即便不知道一个变量所引用的


对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量


所引用对象的类型,动态决定调用哪个对象中的方法


静态语言和动态语言关于多态的区别


静态语言实现多态的三个必要条件


继承


方法重写


父类引用指向子类对象


动态语言的多态崇尚“鸭子类型"当看到一只鸟走起来像鸭子、


游泳起来像鸭子收起来也像鸭子,那么这只鸟就可以被称为鸭子。


在鸭子类型中,不需要关心对象是什么类型,到底是不是鸭子,只关心对象的行为。


特殊方法和特殊属性


                 名称                      描述


特殊属性   __dict__                 获得类对象或实例对象所绑定的所有属性和方法的字典




特殊方法   __len__()              通过重写__1en__()方法,让内置函数1en()的参数可以是自定义类型


__add__()              通过重写__add__()方法,可使用自定义对象具有“+”功能


__new__()              用于创建对象


__init__()              对创建的对象进行初始化


类的浅拷贝与深拷贝


变量的赋值操作


只是形成两个变量,实际上还是指向同一个对象


浅拷贝


Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝


,因此,源对象与拷贝对象会引用同一个子对象


深拷贝


·使用copy模块的 deepcopy函数,递归拷贝对象中包含


的子对象,源对象和拷贝对象所有的子对象也不相同


模块


模块英文为 Modules


·函数与模块的关系


·一个模块中可以包含N多个函数


在Python中一个扩展名为.py的文件就是一个模块


使用模块的好处


·方便其它程序和脚本的导入并使用


避免函数名和变量名冲突


提高代码的可维护性


提高代码的可重用性


自定义模块


创建模块


新建一个py文件,名称尽量不要与 Python自带的标准模块名称相同


导入模块


import   模块名称   [as别名]


from  模块名称 import函数/变量/类


以主程序形式运行


以主程序形式运行


在每个模块的定乂中都包括一个记录模块名称的变量__name__,程序可


以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入


到其它程序中执行,那么它可能在解释器的顶级模


块中执行。顶级模块的__name__变量的值为__main__


Python中的包


Python中的包


包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下作用:


代码规范


·避免模块名称冲突


包与目录的区别


包含__init__. py文件的目录称为包


目录里通常不包含__init__. py文件


包的导入


import    包名.模块名


导入带有包的模块时注意事项


使用import方式进行导入时,只能跟包名或模块名


使用from ... Import可以导入包,模块,函数,变量


Python中常用的内置模块


模块名          描述


sys               与 Python解释器及其环境操作相关的标准库


time             提供与时间相关的各种函数的标准库


os                提供了访问操作系统服务功能的标准库


calendar      提供与日期相关的各种函数的标准库


urllib            用于读取来自网上(服务器)的数据标准库


json             用于使用JS0N序列化和反序列化对象


re                用于在字符串中执行正则表达式匹配和替换


math           提供标准算术运算函数的标准库


decimal      用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算


logging      提供了灵活的记录事件、错误、警告和调试信息等目志信息的功能


第三方模块的安装及使用


第三方模块的安装


pip install 模块名


第三方模块的使用


import 模块名


编码格式


常见的字符编码格式


Python的解释器使用的是 Unicode(内存)


py文件在磁盘上使用UTF-8存储(外存)


文件的读写俗称"IO操作"


文件读写操作流程


内置函数open()创建文件对象


常用的文件打开模式


文件的类型


按文件中数据的组织形式,文件分为以下两大类


文本文件:


存储的是普通“字符”文本,默认为 unicode字符集,


可以使用记本事程序打开


二进制文件:


把数据内容用“字节"进行存储,无法用记事本打开,必须使用专用的软件打开,


举例:mp3音频文件jpg图片doC文档等


打开模式   描述


r 以只读模式打开文件,文件的指针将会放在文件的开头


w 以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头


a 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾


b 以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb,或者wb


+ 以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+


文件对象的常用方法


方法名                                说明


read([size])                        从文件中读取size个字节或字符的内容返回。若省略[size]则读取到文件末尾,即一次读取文件所有内容


readline()         从文本文件中读取一行内容


readlines()                         把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回


write(str)                           将字符串str内容写入文件


writelines(s_list)                将字符串列表s_list写入文本文件,不添加换行符


seek(offset[,whence])       把文件指针移动到新的位置, offset表示相对于whence的位置:


                                          offset:为正往结束方向移动,为负往开始方向移动


                                          whence不同的值代表不同含义:


                                          0:从文件头开始计算(默认值)


                                          1:从当前位置开始计算


                                          2:从文件尾开始计算


tell()                                   返回文件指针的当前位置


flush()                                把缓冲区的内容写入文件,但不关闭文件


close()                                把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源


Wt语句(上下文管理器)


with语句可以自动管理上下文资源,不论什么原因跳出with块,


都能确保文件正确的关闭,以此来达到释放资源的目的


σs模块是Python內内置的与操作系统功能和文件系统相关的模块,


该模块中的语句的执行结果通常与操作系统有关


,在不同的操作系统上运行,得到的结果可能不一样。


os模块与os.path模块用于对目录或文件进行操作


函数                                  说明


getcwd                             返回当前的工作目录


listdir(path)                      返回指定路径下的文件和目录信息


mkdir(path[, mode])       创建目录


makedirs(path1/path2...[,mode]) 创建多级目录


rmdir(path)     删除目录


removedirs(path1/path2......)        删除多级目录


chdir(path)     将path设置未当前工作目录


os.path模块操作目录相关函数


函数 说明


abspath(path) 用于获取文件或目录的绝对路径


exists(path) 用于判断文件或目录是否存在,如果存在返回True,否则返回False


join(path,name) 将目录与目录或者文件名拼接起来


splitext(path) 分离文件名和扩展名


basename(path) 从一个目录中提取文件名


dirname(path) 从一个路径种提取文件路径,不包括文件名


isdir(path) 用于判断是否为路径print函数可以输入字符串,数字,和表达式


print('hello world')


print(10)


print(10*9)


#将数据输出文件中,注意点,1.所指定的盘符在存在,2.使用file=fp


fp=open'D:/text.txt','a+')#a+如果文件不存在就创建,存在就在文件内容的后面继续追加


print('helloworld',file=fp)


fp.close()


转义字符


\n换行


\t水平制表,(跳到下一个Tab的为位置)


\b退格


\r 回车,将单签位置移到本行开头


\?代表一个问号


\空字符


\\代表一个反斜杠字符'\'


\'代表一个单引号


\"代表一个双引号字符


原字符,不希望字符串中的转义字符起作用。就使用原字符,就是在字符串之前加上r,或R


注意事项,最后一个字符不能是反斜杠


保留字查看


我的保留字:有一些单词被我赋予了特定的意义,


这些单词你在给你的任何对象起名字的时候都不能用


import keyword


print(keyword.kwlist)


我的规则你必须要知道


·变量、函数、类、模块和其它对象的起的名字就叫标识符


·规则:


    ·宇母、数宇、下划线


·不能以数字开头


·不能是我的保留字


·我是严格区分大小写的


变量的定义和使用


变量由三部分组成


标识:表示对象所存储的内存地址,使用内置函数id(obj)来获取


类型:表示的是对象的数据类型,使用内置函数type(obj)来获取


值:表示对象所存储的具体数据,使用print(obj)可以将值进行打印输出


当多次赋值之后,变量名会指向新的空间


数据类型


常用的数据类型


整数类型 ——>int ——>98


浮点数类型——>float——>3.14159


布尔类型——>bool——>True,False


字符串类型——>str——>'人声苦短,我永Python'


数据可以表示为二进制,十进制,八进制,十六进制


print('十进制',118)


print('二进制',0b10101111)


print('八进制',0o176)八进制以0o开头


print('十六进制'0x1EAF)


浮点类型


浮点数整数部分和小数部分组成


浮点数存储不精确性


使用浮点数进行计算时,可能会出现小数位数不确定的情况


布尔类型


用来表示真或假的值


True表示真,False表示假


布尔值可以转化为整数


True——>1


False——>0


字符串类型


字符串又称为不可变的字符序列


可以使用单引号''双引号""三引号''' '''或""" """来定义


单引号和双引号定义的字符串必须在一行


三引号定义的字符串可以分布在连续的多行


Python中的注释


注释


·在代码中对代码的功能进行解释说明的标注性文字,


可以提高代码的可读性


·注释的内容会被Python解释器忽略


·通常包括三种类型的注释


·单行注释——〉以“#”开头,直到换行结束


·多行注释——>并没有单独的多行注释标记,将一对三引号之间的代码称为多行注释


·中文编码声明注释——>在文件开头加上中文声明注释,用以指定源码文件的编码格式


''' 多行注释'''


算术运算符


+加法运算


-减法运算


*乘法运算


/除法运算


//整除运算


一正一负向下取整 


%


(有负数)求余  余数=被除数-除数*商


赋值运算符


+=,-=,*=,/=,//=,%=


支持系列解包赋值


a,b,c=20,30,40


比较运算符,比较运算符的结果为bool类型


比较对象的表示使用is


比如a=10 id=120


b=10 id=120


a is b    true


is not表示a与b的标识id不相等所以false


a is not b 为false


布尔运算符


and并且      有一个false就为false


or或者 有一个true就是true


not 对bool类型操作数取反


in 与not in


s='helloworld'


print('w' in s)w在s的变量的字符串里是对的


print('k' in s)k不在s变量的字符串里是错的


print('w' not in s)False


print('k'not in s)k不在s变量的字符串里就是对的


位运算符


将数据转成二进制进行计算


位与&,对应数位都是1,结果数位才是1,否则为0


位或|,对应数位都是0,结果数位才是0,否则为1


左移位运算符<<,高位溢出舍弃,低位补0


右移位运算符>>,低位溢出舍弃,高位补0


print(4<<1)向左移动一位相当于乘以2


print(4>>2)向右移动2位相当于除以4 


Python中的运算符


运算符优先级


先是算术运算符


后是位运算,再后是比较运算符,布尔运算符


顺序结构


程序从上到下顺序地执行代码,中间没有任何的判断和跳转,直到程序结束


对象的布尔值


Python一切皆对象,所有对象都有一个布尔值


获取对象的布尔值


使用内置函数bool()


以下对象的布尔值为False


False


数值0


None


空字符串


空列表


空元组


空字典


空集合


单分支结构


语法结构


if 条件表达式:


条件执行体


双分支结构


if 条件表达式:


条件执行体


else 条件表达式:


条件执行体


if 条件表达式1:


条件执行体1


elif 条件表达式2:


条件执行体2


elif 条件表达式N:


条件执行体N


[else:]


条件表达式N+1


嵌套if


语法结构:


if条件表达式1:


if内层条件表达式:


内层条件执行体1


else:


内存条件执行体2


else:


条件执行体


条件表达式


条件表达式是if......else的简写


语法结构:


x if    判断条件 else y


运算规则


如果判断条件的布尔值为True。条件表达式的返回值为x。否则条件表达式的返回值为False


pass语句


pass语句


语句什么都不做,只是一个占位符,用在语法上需要语句的地方


什么时候使用:


先搭建语法结构,还没想好代码怎么写的时候


哪些语句一起使用


if语句的条件执行体


for-in语句的循环体


定义函数时的函数体


内置函数range()


创建range对象的三种方式


range(stop)——>创建一个(0,stop)之间的整数序列,步长为1


range(start,stop)——>创建一个[start,stop)之间的整数序列,步长为1


range(start,stop,step)——>创建一个[start,stop)之间的整数序列,步长为step


range类型的优点:不管range对象表示的整数序列有多长,所有range对象占用的


内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,


才会去计算序列中的相关元素


循环结构


反复做同一件事情的情况,称为循环


循环结构的流程图


循环的分类


while


for -in


语法结构


while 条件表达式:


条件执行体(循环体)


选择结构的if与循环结构while的区别


If是判断一次,条件为True执行一行


while是判断N+1次,条件为True执行N次


for-in循环


in表达从(字符串、序列等)中依次取值,又称为遍历


for-in遍历的对象必须是可迭代对象


for-in的语法结构


for自定义的变量in可迭代对象:循环体


for-in的执行图


循环体内不需要访问自定义变量,可以将自定义变量替代为下划线


 流程控制语句break


break语句用于结束循环结构,通常与分支结构if一起使用


流程控制语句continue


continue语句


勇于结束当前循环,进入下一次循环,通常与分支结构中的if一起使用


列表


为什么需要列表


变量可以存储一个元素,而列表是一个"大容器"可以存储N多个元素,


程序可以方便地对这些数据进行整体操作


列表相当于其他语言中的数组


列表的创建


列表需要使用中括号[]元素之间使用英文的逗号进行分隔


列表的创建方式


使用中括号


使用内置函数list()


lst=['大圣','额额']


lst2=(['大圣','额额'])


列表的特点


列表元素按顺序有序排序


索引映射唯一个数据


列表可以存储重复数据


任意数据类型混存


根据需要动态分配和回收内存


列表的查询操作


获取列表中指定元素的索引


index()如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引


如果查询的元素在列表中不存在,则会抛出ValueError


还可以在指定的start和stop之间进行查找


获取列表中的单个元素获取单个元素


正向索引从0到N-1   举例:lst[0]


逆向索引从-N到-1   举例:lst[-N]


指定索引不存在,则抛出IndexError


获取元素的查询操作


获取列表中的多个元素


语法格式


列表名[start:stop:step]


切片的结果——>原列表片段的拷贝


切片的范围[start,stop]


step默认为1——>简写为[start:stop]


step为正数[:stop:step]切片的第一个元素默认是列表的第一个元素 从start开始往后计算切片


step为正数[stop::step]切片的最后一个元素默认是列表的最后一个元素 从start开始往后计算切片


step为负数[:stop:step]切片的第一个元素默认是列表的最后一个元素 从start开始往前计算切片


step为负数[stop::step]切片的最后一个元素默认是列表的第一个元素 从start开始往前计算切片


列表元素的查询操作


判断指定元素在列表中是否存在


元素 in 列表名


元素 not in 列表名


列表元素的遍历


for 迭代遍历 in 列表名:


列表元素的增加操作


列表元素的增加操作


append()在列表的末尾添加一个元素


extend()在列表的末尾至少添加一个元素


insert()在列表的任意位置添加一个元素


切片在列表的任意位置添加至少一个元素


列表元素的删除操作


列表元素的删除操作


remove()


一次删除一个元素


重复元素只删除第一个


元素不存在抛出ValueError


pop()


删除一个指定索引位置上的元素


指定索引不存在抛出IndeError


不知道索引,删除列表中最后一个元素


切片 一次至少删除一个元素


clear()清空列表中的所有元素


del 删除列表


列表元素的修改操作


列表元素的修改操作


为指定索引的元素赋予一个新值


为指定的切片赋予一个新值


列表元素的排序操作


常见的两种方式


用sort()方法,列有中的所有元素默认按照从小到大的顺序进行排序


,可以指定reverse=True进行降序排序


调用内置函数sorted(),可以指定reverse=True,进行降序排序,


生成一个新的列表对象,原列表不发生改变


列表生成式


列表生成式简称"生成列表的公式"


语法格式:


i*i for i in range(1,10)


注意事项:"表示列表元素的表达式"中通常包含自定义变量


列表中的元素的值为2,4,6,8,10


lst2=[i*2 for i in range(1,6)]


print(lst2)


字典


Python内置的数据结构之一,与列表一样是一个可变序列


以键值对的方式存储数据,字典是一个无序的序列


字典的实现原理


字典的实现原理与查字典类似,查字典是先根据部首或拼音查找


应的页码,Python中的字典是根据key查找value所在的位置


字典的创建


字典的创建


最常用的方式:使用花括号


scores{'张三':100,'李四':98,'王五':45}


使用内置函数dict()


dict(name='jack',age=20)


[]取值与使用get()取值的区别


[]如果字典中不存在指定的key,抛出keyError异常


get()方法取值,如果字典中不存在指定的key,并不会抛出KeyError而是返回None


,可以通过参数设置默认的value,以便指定的key不存在时返回


字典的常用操作


key的判断


key的判断


in 指定的key在字典中存在返回True——>'张三'in scores


not in 指定的key在字典中不存在返回True——>'Marry' not in scores


字典元素的删除


del scores['张三']


字典元素的新增


scores['Jack']=90


字典的常用操作


获取字典视图的三个方法


获取字典视图


keys()——>获取字典中所有key


values()——>获取字典中所有value


items()——>获取字典中所有key,value对


字典的常用操作


字典元素的遍历


for item in scores:


print(item)


字典的特点


字典中的所有元素都是一个key-value对,key不允许重复,value可以重复


字典中的元素是无序的


字典中的key必须是不可变对象


字典也可以根据需要动态地伸缩


字典会浪费较大的内存,是一种使用空间换时间的数据结构


字典生成式


内置函数zip()


用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,


然后返回由这些元组组成的列表


items=['Fruits','Books','0thers'] 


prices=[96,78,85]


d={item.upper():price for item,price in zip(items,prices)}


print(d)


什么是元组


元组


·Python内置的数据结构之一,是一个不可变序列


不可变序列与可变序列


不变可变序:字符串、元组


不变可变序列:没有增、删,改的操作


可变序列:列表、字典


可变序列:可以对序列执行增、删、改操作,对象地址不发生更改


元组的创建方式


元组的创建方式


直接小括号t=(Python;‘hello',90)


使用内置函数tuple()


t=tuple((“Python',hello',90))·


只包含一个元组的元素需要使用逗号和小括号


t=(10,)


为什么要将元组设计成不可变序列


为什么要将元组设计成不可变序列


在多任务环境下,同时操作对象时不需要加锁


因此,在程序中尽量使用不可变序列


·注意事项:元组中存储的是对象的引用


a)如果元组中对象本身不可对象,则不能再引用其它对象


b)如果元组中的对象是可变对象,则可变对象的引用不允许


改变,但数据可以改变


元组的遍历


·元组是可迭代对象,所以可以使用for..in进行遍历


t=('Python','world',98)


for item in t:


print(item)


什么是集合


集合


·Python语言提供的内置数据结构


·与列表、字典样都属于可变类型的序列


·集合是没有value的字典


集合的创建方式


集合的创建方式


直接{}


s={'world','hello',90}


使用内置函数set()


集合中的元素不允许重复


集合中的元素是无序的


集合的相关操作


集合元素的判断操作


in或not in


集合元素的新增操作


调用add()方法,一次添中一个元素


调用update()方法至少添加一个元素


集合元素的删除操作


调用remove()方法,一次删除一个指定元素,如果指定的元素不存在抛出


KeyError


调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不抛出异常


调用pop()方法,一次只删除一个任意元素


调用clear()方法,清空集合


集合间的关系


两个集合是否相等


可以使用运算符==或!=进行判断


一个集合是否是另一个集合的子集


可以调用方法issubset进行判断


B是A的子集


一个集合是否是另一个集合的超集


可以调用方法issuperset进行判断


A是B的超集


两个集合是否没有交集


可以调用方法isdisjoint进行判断


intersection()与&等价,交集操作


union与|等价,并集操作


difference与-等价,差集操作


symmetric_difference与^符号等价,对称差集操作


列表生成式


lst=[i*i for i in range(6)]


print(lst)


集合生成式


s={i*I for i in range(6)}


print(s)


字符串的驻留机制


字符串


在Python中字符串是基本数据类型,是一个不可变的字符序列


什么叫字符串驻留机制呢?


仅保存一份相同且不可变字符串的方法,


不同的值被存放在字符串的驻留池中,


Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,


不会开辟新空间,而是把该字符串的地址赋给新创建的变量


字符串的驻留机制


驻留机制的几种情况(交互模式)


字符串的长度为0或1时


符合标识符的字符串


字符串只在编译时进行驻留,而非运行


时[-5,256]之间的整数数字


sys中的intern方法强制2个字符串指向同一个对象


PyCharm对字符串进行了优化处理


字符串驻留机制的优缺点


·当需要值相同的字符串时,


可以直接从字符串池里拿来使用,


避免频繁的创建和销毁,提升效率和节约内存,


因此拼接字符串和修改字符串是会比较影响性能的。


在需要进行字符串拼接时建议使用str类型的join方法,


而非+,因为join()方法是先计算出所有字符中的长度,


然后再拷贝,只new一次对象,效率要比"+”效率高


字符串的查询操作的方法


查询方法


index() 查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError


rindex()查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError


find()查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1


rfind()查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1


·字符串的大小写转换操作的方法


大小写转换


upper()把字符串中所有字符都转成大写字母  转换成大写之后会产生一个新的字符串对象


lower()把字符串中所有字符都转成小写字母  转换成小写之后会产生一个新的字符串对象


swapcase()把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母


capitalize()把第一个字符转换为大写,把其余字符转换为小写


title()把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写


字符串的常用操作


·字符串内容对齐操作的方法


字符串对齐


center()


居中对齐,第1个参数指定宽度,第2个参数指定填充符,


第2个参数是可选的,默认是空格


,如果设置宽度小于实际宽度则则返回原字符串


ljust()


左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,


默认是空格如果设置宽度小于实际宽度则则返回原字符串


rjust()


右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,


默认是空格如果设置宽度小于实际宽度则则返回原字符串


zfill()


右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,


如果指定的宽度小于等于字符串的长度,返回字符串本身


字符串劈分操作的方法


字符串的劈分


split()


从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表


以通过参数sep指定劈分字符串是的劈分符


通过参数maxsplit指定劈分字符串时的最大劈分次数,


在经过最大次劈分之后,剩余的子串会单独做为一部分


rsplit()


从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表


以通过参数sep指定劈分字符串是的劈分符


通过参数maxsplit指定劈分字符串时的最大劈分次数,


在经过最大次劈分之后,剩余的子串会单独做为一部分


判断字符串操作的方法


判断字符串的方法


isidentifier()判断指定的字符串是不是合法的标识符


isspace()判断指定的字符串是否全部由空白字符组成(回车、换行,水平制表符)


isalpha()判断指定的字符串是否全部由字母组成


isdecimal()判断指定字符串是否全部由十进制的数字组成


isnumeric()判断指定的字符串是否全部由数字组成


isalnum()判断指定字符串是否全部由字母和数字组成


字符串操作的其它方法


字符串替换


replace()作用:


第1个参数指定被替换的子串,


第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,


替换前的字符串不发生变化,


调用该方法时可以通过第3个参数指定最大替换次数


字符串的合并


join()


将列表或元组中的字符串合并成一个字符串


字符串的比较操作


运算符:>,>=,<,<=,==,!=


比较规则:首先比较两个字符串中的第一个字符,


如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,


其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较


比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),


调用内置函数ord可以得到指定字符的ordinal value。


与内置函数ord对应的是内置函数chr,


调用内置函数chr时指定ordinal value可以得到其对应的字符


字符串的切片操作


字符串是不可变类型


·不具备增、删、改等操作


·切片操作将产生新的对象


s='hello,Python'


s1=s[:5]由于没有指定起始位置,所以从0开始切


s2=s[6:]由于没有指定结束位置,所以切到字符串最后一个元素


s3='!'


newstr=s1+s3+s2


切片操作[start:end:step]


print(s[1:5:1])#从1开始截到5(不包含5),步长为1


print(s[::2])#默认从0开始,没有写结束,默认到字符串的最后一个元素,步长为2,两个元素之间的索引间隔为2


print(s[::-1])#默认从字符串的最后一个元素开始,到字符串的第一个元素结束,因为步长为负数


print(s[-6::1])#从素引为-6开始,到宁符串的最后一个元素结束,步长为1


格式化字符串


格式化字符串的两种方式


%作占位符


print(’我叫%s,今年%d岁’%(name,age))


{}作占位符


print'我叫{0},今年{1}岁’.format(name,age))


f-string


print(f'我叫{name},今年{age}岁')


%d是指宽度例如print('%10d'% 99) 10表示宽度


%f是表示保留小数,print('%.3f'%3.1415926)   .3表示是小数点后三位


同时表示宽度和精度


print('%10.3f' %3.1415926) 一共总宽度为10,小数点后3位


print('{0:.3}'.format(3.1415926))#.3表示的是一共是3位数


print'{0.3f}'.format(3.1415926))#.3f表示是3位小数


print({:10.3f)'.format(3.1415926))#同时设置宽度和精度,一共是10位,3位是小数


字符串的编码转换


·为什么需要字符串的编码转换


编码与解码的方式


·编码:将字符串转换为二进制数据(bytes)


·解码:将bytes类型的数据转换成字符串类型


s='天涯共此时’


#编码


print(s.encode(encoding='GBK'))#在GBK这种编码格中一个中文占两个字节


print(s.encode(encoding='UTF-8'))#在UTF-8这种编辑格式中,一个中文占三个字节


#解码 


#byte代表就是一个二进制数据(字节类型的数据)


 byte=s.encode(ncoding='GBK')#偏码


 print(byte,decode(encoding='GBK'))#解码


byte=s.encode(encoding='UTF-8') 


print(byte.decode(encoding='UTF-8'))


函数


什么是函数


函数就是执行特定任和以完成特定功能的一段代码


    为什么需要


函数


·复用代码


·隐藏实现细节


·提高可维护性


·提高可读性便于调试


函数的创建


def 函数名([输入参数]):


    函数体


[return xxx]


函数的返回值


函数返回多个值时,结果为元组


函数的返回值


(1)如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】return可以省略不写


(2)函数的返回值,如果是1个,直接返回类型


(3)函数的返回值,如果是多个,返回的结果为元组


函数在定义时,是否需要返回值,视情况而定


函数的参数定义


函数定义默认值参数


·函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参


函数的参数定义


个数可变的位置参数


定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的


位置参数


使用*定义个数可变的位置形参


结果为一个元组


个数可变的关键字形参


定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关


键字形参


使用**定义个数可变的关键字形参


结果为一个字典


函数个数可变的位置参数,只能是1个


个数可变的关键字参数,只能是1个


在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,


要求,个数可变的位置形参,放在个数可变的关键字形参之前


变量的作用域


变量的作用域


·程序代码能访问该变量的区域


·根据变量的有效范围可分为


·局部变量


·在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会就成全局变量


全局变量


·函数体外定义的变量,可作用于函数内外


global age #函数内部定义的变量,局部变量,局部变量使用global声明,这个变量实际上就变成了全局变量


递归函数


什么是递归函数


·如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数


递归的组成部分


·递归调用与递归终止条件


递归的调用过程


·每递归调用一次函数,都会在栈内存分配一个栈帧,


·每执行完一次函数,都会释放相应的空间


递归的优缺点


·缺点:占用内存多,效率低下


·优点:思路和代码简单


Bug的由来


·世界上第一部万用计算机的进化版-马克2号(Mark I)


Bug的常见类型


·粗心导致错误的自查宝典


1.漏了末尾的冒号,如if语句,循环语句,else子句等


2.缩进错误,该缩进的没缩进,不该缩进的瞎缩进


3.把英文符号写成中文符号,比如说:引号,冒号,括号


4.字符串拼接的时候,把字符串和数字拼在一起


5.没有定义变量,比如说while的循环条件的变量


6.“=="比较运算符和”=”赋值运算符的混用


Bug的常见类型


·被动掉坑问题的解决方案


·Python提供了异常处理机制,可以在异常出现时即


时捕获,然后内部“消化”,让程序继续运行


异常处理


try:


代码块


except:


输出语句


Python的异常处理机制


·多个except结构·捕获异常的顺序按照先子类后父亲类的顺序,


为了避免遗漏可能出现的异常,可以在最后增加BaseException


try...except...else结构


·如果try块中没有抛出异常,则执行else块,


如果try中抛出异常except块


try...except...else...finally结构


finally块无论是否发生异常都会被执行,


能常用来释放try块中申请的资源


Python中常见的异常类型


异常类型                         描述


ZeroDivisionError          除(或取模)零(所有数据类型)


IndexError                      序列中没有此索引( index)


KeyError                         映射中没有这个键


NameError                     未声明/初始化对象(没有属性)


SyntaxError                    Python 语法错误


ValueError                      传入无效的参数


traceback模块


使用traceback模块打印异常信息


traceback.print_exc()


断点程序运行到此处,暂时挂起,停止执行。


此时可以详细观察程序的运行情况,方便做出进一步的判断


进入调试视图进入调试视图的三种方式


(1)单击工具栏上的按钮卷


(2)右键单击编辑区:点击: debug'模块名


(3)快捷键: shift+F9


·类是多个类似事物组成的群体的统称。


能够帮助我们快速理解和判断事物的性质


·数据类型


·不同的数据类型属于不同的类


·使用内置函数查看数据类型


·对象·100、99、520都是int类之下包含的相似的不同个例,


这个个例专业数语称为实例或对象


类的创建


class 类名:#类名每个单词的首字母大写,其余小写


pass


类的组成


·类属性#直接写在类里的变量称为类属性


·实例方法


def eat(self)


print('实力方法括号要写self')


·静态方法


@staticmethod


def method():


print('')


·类方法


@classmethod


def cm(cls):


print('类方法')


在类之外定义的称为函数,在类之内定义的称为方法


静态方法


@staticmethod


@classmethod


def init (self, name, age):


self.name=name #se1f.name称为实体属性个赋值的操作


,将局部变量的name的值赋给实体属性


self. age=age


对象的创建


对象的创建又称为类的实体化


语法:


实体名=类名


例子:


#创建 Student类的实例对象


stu=Student('Jack', 20) 


print(stu.name)#实例属性 


print(stu.age)#实例属性 


stu. info()实例方法


意义:有了实例,就可以调用类中的内容


类属性、类方法、静态方法


类属性:类中方法外的变量称为类属性,被该类的所有对象所共享


类方法:使用@ classmethod修饰的方法,使用类名直接访问的方法


静态方法:使用@ staticmethod修饰的主法,使用类名直接访问的方法


动态绑定属性和方法


Python是动态语言,在创建对象之后,可以动态地绑定属性和方法


def show():


print('我是一函数')


 stu=Student('Jack', 20)


stu. gender=男#态绑定性别


print(stu. name, stu age, stu gender)


stu.show=show#动态绑定方法


stu show()


面向对象的三大特征


封装:提高程序的安全性·将数据(属性)和行为(方法)包装到类对象中。


在方法内部对属性进行操作,在类对象的外部调用方法。


这样无需关心方法内部的具体实现细节,从而隔离了复杂度在 Python中没有


专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,


前边使用两个“”。


继承:提高代码的复用性


多态:提高程序的可扩展性和可维护性


self.__age=age#年龄不希望在类的外部被使用,所以加了两个_


stu.show()


#在类的外使用使用name与age


print(stu._Student__age)#在类的外部可以通过_Student__age


继承


语法格式


    class子类类名(父类1,父类2..):


    pass


如果一个类没有继承任何类,则默认继承 object


Python支持多继承


定义子类时,必须在其构造函数中调用父类的构造函数


方法重写


如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写


子类重写后的方法中可以通过super(.Xx)调用父类中被重写的方法


object类


object类是所有类的父类,因此所有类都有 object类的属性和方法


内置函数dir()可以查看指定对象所有属性


Object有一个st(方法,用于返回一个对于"对象的描述",


对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,


所以我们经常会对__str__()进行重写


多态


简单地说,多态就是“具有多种形态”,它指的是:即便不知道一个变量所引用的


对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量


所引用对象的类型,动态决定调用哪个对象中的方法


静态语言和动态语言关于多态的区别


静态语言实现多态的三个必要条件


继承


方法重写


父类引用指向子类对象


动态语言的多态崇尚“鸭子类型"当看到一只鸟走起来像鸭子、


游泳起来像鸭子收起来也像鸭子,那么这只鸟就可以被称为鸭子。


在鸭子类型中,不需要关心对象是什么类型,到底是不是鸭子,只关心对象的行为。


特殊方法和特殊属性


                 名称                      描述


特殊属性   __dict__                 获得类对象或实例对象所绑定的所有属性和方法的字典




特殊方法   __len__()              通过重写__1en__()方法,让内置函数1en()的参数可以是自定义类型


__add__()              通过重写__add__()方法,可使用自定义对象具有“+”功能


__new__()              用于创建对象


__init__()              对创建的对象进行初始化


类的浅拷贝与深拷贝


  • 变量的赋值操作


只是形成两个变量,实际上还是指向同一个对象


浅拷贝


Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝


,因此,源对象与拷贝对象会引用同一个子对象


深拷贝


·使用copy模块的 deepcopy函数,递归拷贝对象中包含


的子对象,源对象和拷贝对象所有的子对象也不相同


模块


模块英文为 Modules


·函数与模块的关系


·一个模块中可以包含N多个函数


在Python中一个扩展名为.py的文件就是一个模块


使用模块的好处


·方便其它程序和脚本的导入并使用


避免函数名和变量名冲突


提高代码的可维护性


提高代码的可重用性


自定义模块


创建模块


新建一个py文件,名称尽量不要与 Python自带的标准模块名称相同


导入模块


import   模块名称   [as别名]


from  模块名称 import函数/变量/类


以主程序形式运行


以主程序形式运行


在每个模块的定乂中都包括一个记录模块名称的变量__name__,程序可


以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入


到其它程序中执行,那么它可能在解释器的顶级模


块中执行。顶级模块的__name__变量的值为__main__


Python中的包


Python中的包


包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下作用:


代码规范


·避免模块名称冲突


包与目录的区别


包含__init__. py文件的目录称为包


目录里通常不包含__init__. py文件


包的导入


import    包名.模块名


导入带有包的模块时注意事项


使用import方式进行导入时,只能跟包名或模块名


使用from ... Import可以导入包,模块,函数,变量


Python中常用的内置模块


模块名          描述


sys               与 Python解释器及其环境操作相关的标准库


time             提供与时间相关的各种函数的标准库


os                提供了访问操作系统服务功能的标准库


calendar      提供与日期相关的各种函数的标准库


urllib            用于读取来自网上(服务器)的数据标准库


json             用于使用JS0N序列化和反序列化对象


re                用于在字符串中执行正则表达式匹配和替换


math           提供标准算术运算函数的标准库


decimal      用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算


logging      提供了灵活的记录事件、错误、警告和调试信息等目志信息的功能


第三方模块的安装及使用


第三方模块的安装


pip install 模块名


第三方模块的使用


import 模块名


编码格式


常见的字符编码格式


Python的解释器使用的是 Unicode(内存)


py文件在磁盘上使用UTF-8存储(外存)


文件的读写俗称"IO操作"


文件读写操作流程


内置函数open()创建文件对象


常用的文件打开模式


文件的类型


按文件中数据的组织形式,文件分为以下两大类


文本文件:


存储的是普通“字符”文本,默认为 unicode字符集,


可以使用记本事程序打开


二进制文件:


把数据内容用“字节"进行存储,无法用记事本打开,必须使用专用的软件打开,


举例:mp3音频文件jpg图片doC文档等


打开模式   描述


r 以只读模式打开文件,文件的指针将会放在文件的开头


w 以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头


a 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾


b 以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb,或者wb


+ 以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+


文件对象的常用方法


方法名                                说明


read([size])                        从文件中读取size个字节或字符的内容返回。若省略[size]则读取到文件末尾,即一次读取文件所有内容


readline()         从文本文件中读取一行内容


readlines()                         把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回


write(str)                           将字符串str内容写入文件


writelines(s_list)                将字符串列表s_list写入文本文件,不添加换行符


seek(offset[,whence])       把文件指针移动到新的位置, offset表示相对于whence的位置:


                                          offset:为正往结束方向移动,为负往开始方向移动


                                          whence不同的值代表不同含义:


                                          0:从文件头开始计算(默认值)


                                          1:从当前位置开始计算


                                          2:从文件尾开始计算


tell()                                   返回文件指针的当前位置


flush()                                把缓冲区的内容写入文件,但不关闭文件


close()                                把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源


Wt语句(上下文管理器)


with语句可以自动管理上下文资源,不论什么原因跳出with块,


都能确保文件正确的关闭,以此来达到释放资源的目的


σs模块是Python內内置的与操作系统功能和文件系统相关的模块,


该模块中的语句的执行结果通常与操作系统有关


,在不同的操作系统上运行,得到的结果可能不一样。


os模块与os.path模块用于对目录或文件进行操作


函数                                  说明


getcwd                             返回当前的工作目录


listdir(path)                      返回指定路径下的文件和目录信息


mkdir(path[, mode])       创建目录


makedirs(path1/path2...[,mode]) 创建多级目录


rmdir(path)     删除目录


removedirs(path1/path2......)        删除多级目录


chdir(path)     将path设置未当前工作目录


os.path模块操作目录相关函数


函数 说明


abspath(path) 用于获取文件或目录的绝对路径


exists(path) 用于判断文件或目录是否存在,如果存在返回True,否则返回False


join(path,name) 将目录与目录或者文件名拼接起来


splitext(path) 分离文件名和扩展名


basename(path) 从一个目录中提取文件名


dirname(path) 从一个路径种提取文件路径,不包括文件名


isdir(path) 用于判断是否为路径


python编辑的一些基础的评论 (共 条)

分享到微博请遵守国家法律