Python

Python

八月 04, 2021

列表

列表的特点:列表元素按顺序有序排列,索引映射唯一个元素,列表可以存储重复数据,任意数据类型混存,根据需要动态分配和回收内存

列表元素的增加操作:append(),在列表的末尾增加一个元素;extend(),在列表的末尾至少增加一个元素;insert(),在列表的任意位置增加一个元素;切片,在列表的任意位置增加至少一个元素

列表元素的删除操作:remove(),一次删除一个元素,重复元素只删除第一个,不存在则抛出ValueError异常;pop(),删除一个指定索引位置上的元素,不存在抛出IndexError,不指定索引删除表中最后一个元素;clear(),清空列表;del,删除列表

sort()默认升序排序,reverse=True表示降序排序,reverse=False就是升序排序,在原列表;

sorted使用内置函数对列表进行排序,将产生一个新的列表对象

列表生成式:[i*i for i in range(1,10)]

字典

python内置的数据结构之一,与列表一样是一个可变序列;以键值对的方式存储数据,字典是一个无序的序列

字典的特点:字典中的所有元素都是一个key-value对,key不允许重复,valuekey重复;

字典中的元素是无序的;字典中的key必须是不可变对象;字典也可以根据需要动态的伸缩;字典会浪费较大的内存,是一种使用空间换时间的数据结构

字典生成式:items=[‘Fruits’,’Books’,’Others’] prices=[96,87,98]

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

元组

元组是python内置的数据结构之一,是一个不可变序列

不可变序列:字符串,元组 不变可变序列:没有增,删,改的操作

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

元组的创建方式:1.直接小括号 t=(‘Python’,’hello’,90) 2.使用内置函数tuple() t=tuple((‘Python’,’hello’,90)) 3.只包含一个元组的元素需要使用逗号和小括号 t=(10, )

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

在多任务环境下,同时操作对象时不需要加锁;因此,在程序中尽量使用不可变序列

注意事项:元组中存储的是对象的引用 (a)如果元组中对象本身不可对象,则不能再引用其他对象 (b)如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变

集合

集合是python语言提供的内置数据结构,与列表,字典一样都属于可变类型的序列,集合是没有value的字典

创建方式:直接{},集合中的元素不允许重复 使用内置函数set()

空集合set()

判断:in/not in

新增操作:add()方法一次添中一个元素,update()方法至少添中一个元素

删除操作:remove()一次删除一个指定元素,如果指定的元素不存在抛出KeyError,discard()一次删除一个指定元素如果指定的元素不存在不抛异常,pop()一次只删除一个任意元素,clear()清空集合

集合的关系:两个集合是否相等可以用运算符==或!=进行判断,一个集合是否是另一个集合的子集可以调用方法issubset进行判断,一个集合是否是另一个集合的超集可以调用方法issuperset进行判断,两个集合是否没有交集可以调用方法isdisjoint进行判断

交集操作:intersection()与&等价 并集操作:union()与|等价

集合生成式:{i*i for i in range(1,10)}

image-20210806150348242

image-20210809205135514

字符串

image-20210807101758097

image-20210807102108736

image-20210807102501632

image-20210807102816855

image-20210807103156245

字符串的比较操作

比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较

字符串的编码

编码格式:print(s.encode(encoding=’GBK’))

1.在GBK这种编码格式中,一个中文占两个字节

2.在UTF-8这种编码格式中,一个中文占三个字节

解码格式:byte=s.encode(encoding=’GBK’) 编码print(byte.decode(encoding=’GBK’))解码

函数

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

​ 函数体

​ [return xxx]

在函数调用过程中,进行参数的传递,如果是不可变对象,在函数体的修改不会影响实参的值;如果是可变对象,在函数体的修改会影响

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

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

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

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

image-20210808114722655

class Student:

​ pass

类的名称(类名)由一个或多个单词组成,每个单词的首字母大写,其余小写;直接写在类里面的称为类属性,在类之外定义的称为函数,在类里定义的称为方法。

静态方法:@staticmethod 类方法:@classmethod

动态绑定属性和方法

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

1
2
3
4
5
6
7
8
9
10
11
12
13
def show():`

​ `print('ss')`

`stu=Student('Jack',20)`

`stu.gender='m'#动态绑定性别`

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

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

`stu.show()

输出方法:print(‘姓名:{0},年龄:{1}’.format(name,age))

object类

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

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

object有一个方法,用于返回一个对于“对象的描述”,对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们经常对这个方法进行重写。

特殊方法和特殊属性

image-20210815170956285

类的浅拷贝与深拷贝

变量的赋值操作:只是形成两个变量,实际上还是指向同一个对象

浅拷贝:Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同

包与目录的区别

包含——int——.py文件的目录称为包

目录中通常不包含——int——.py文件

编码格式

image-20210818202255513

文件的读写原理

image-20210818202712159

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

image-20210818203256379

文件对象的常用方法

image-20210818203736311

with语句(上下文管理器)

with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的。

目录操作

os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样

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

image-20210818210441585

image-20210818210807134