五、组合数据类型

5.1认识组合数据类型

序列类型:列表、元组、字符串 —> 支持双向索引

集合类型:集合 —> 确定性、互异性、无序性;放入集合中的元素必须为不可变类型(数字类型,字符串,元组)

映射类型:字典 —> 键值对的形式存在,键必须为不可变类型(数字类型,字符串,元组)

多个相同或者不同数据类型的数据组织成一个整体

5.2列表

1、创建列表:
#方法一:[]
list1 = [] 
list2 = ['p','y']
list3 = ['python1','pppp']
#方法二:set()函数
list4 = list(1)
list5 = list('python')
list6 = list(1,2,'rr')

isinstance()判断是否为可迭代对象

2、访问列表元素
#以索引访问
list1[1]
list1[3]
#以切片方式访问
list2[m:n:step]    # 截取部分元素,形成一个新的列表,m~n-1的元素,步长step默认为1
#在循环中依次访问列表元素
list3 = ['p','y','t','h','o','n']
for i in list3:
    print(i,end = ' ')
# 结果为:p y t h o n
3、添加列表元素

append():在列表结尾追加新的元素

extend():在列表结尾一次添加另一个列表中的所有元素

l1 = ['abc']
l2 = ['123']
l1.extend(l2)
print(l1)
# 结果为:['abc','123']

insert():按照索引将新元素插入列表中

4、元素排序

sort(key=none , reverse = False) —> key指定排序规则,reverse = False 表示升序,True表示降序

—> 排序后有序的元素会覆盖掉原来的元素,不产生新的列表

sorted() —> 升序排列,产生新的列表,原来的列表不变

reverse() —> 逆置列表

5、删除列表元素
name = ['tom','alice','lucy']

del()

# 1删除指定位置的元素
del name[0]
# 2删除整个列表
del name

remove()

# 移除列表中的某个元素,若有多个,只移除第一个
name.remove('tom')

pop()

# 移除指定位置的元素,默认为最后一个
name.pop()
6、列表推导式
[exp for i in list1 [if cond]    # cond为条件
	 for j in list2 [if cond]]
[x+y for x in range(1:3)
	for y in range(2:6)]

5.3元组

1、创建元组
# 1
t = ()
t = (1,)
t = (1,2,3)
# 2
t = tuple()
t = tuple('python')	# ('p','y','t','h','o','n')
2、元组补充说明:

元组为不可变类型,元组中的元素不能修改,所以不支持添加、修改、排序操作

元组中只有一个元素时,形式为(1,)

5.4集合

1、创建集合

空集合只能用set()创建,不包含元素的{}创建的是空字典

s1 = {1}
s2 = set([1,2,3])
s3 = set((2,3,4))
s4 = set(range(5))
2、常用方法

方法名

说明

add(x)

向集合中添加元素x

remove(x)

删除元素中的x元素,不存在则抛出KeyError异常

discard(x)

删除元素中的x元素,不存在不做处理

pop()

返回一个元素,并删除该元素

clear()

清空集合

copy()

复制集合,返回一个集合

isdisjoint(T)

判断与集合T是否有相同元素,有False,没有True

5.5字典

1、创建字典

以键值对的形式存在

{}
dict()
2、访问字典
# 利用键访问 格式:字典变量[键]
dict1['A']
dict1[3]
# 利用get()根据键获取值
dict1.get('A')
# keys():获取所有键
# values():获取所有值
# items():获取所有键值对
3、添加与修改

添加

1、 为指定的键(键存在为修改元素;不存在为添加元素)赋值

2、update()方法:

dict1.update(sno = 55)

修改:同添加

4、删除

1、pop()

2、popitem(): 随机删除字典中的元素

3、clear():清空字典

六、函数

1、定义与调用

# 定义函数的格式
def 函数名(参数列表):
    函数体
    [return 语句,可以省略]

函数可以嵌套定义

被嵌套的函数为内层函数,嵌套的函数为外层函数,函数外部无法调用内层函数

2、函数参数的传递

1.位置参数传递

2.关键字参数的传递

有关键字参数传递后不再接受按照参数传递的参数

3.默认参数的传递

4.参数的打包与解包

打包:

*args 接收以元组形式打包的多个值

**kwargs 接收以字典形式打包的多个值

解包:

若以元组的形式接收参数,可以使用* 将其拆分成多个值

若以字典的形式接收参数,可以使用**将其拆分成多个数据

3、函数的返回值

返回一个值

返回多个值:被保存到元组中

4、变量作用域

局部变量:函数内部定义,只能在函数内部使用

全局变量:整个程序内使用

global关键字:可以实现在函数内部修改全局变量

nonlical关键字:可以实现在函数内部修改嵌套函数内的变量

5、特殊形式的函数

1、递归函数:调用了自身的函数

2、匿名函数:无需定义标识符、函数体只能是一个表达式

lambda <形式参数列表> : <表达式>
# eg.
lambda x : pow(x,2)

七、文件操作

1、基础操作

打开文件:open()

打开方式:

关闭文件:

# close()函数
file.close()

# with语句
with open()
	#一些操作
使用完毕后,会自动关闭

读写操作

方法名

说明

read(x)

x表示读取的字节数,默认为-1,表示全部读取

readline()

读取一行数据

readlines()

一次性读取所有文件,每一行为一个元素,以列表的形式保存

write()

将指定字符写入文件

writelines()

tell()

获取文件当前的读写位置

seek(offset,from)

设置文件操作的位置,offset表示偏移量,from—>0:文件开头;1:当前读写位置,2:文件结尾

2、文件目录管理

方法名

说明

remove()

删除文件

rename()

文件重命名

mkdir()/rmdir()

创建/删除目录

getcwd()

获取当前目录

chdir()

更改默认名目录

listdir()

获取文件名列表

需要引入 os模块

采用 模块名.方法名 的方法调用

八、面向对象

九、异常

1、概述

BaseException类是所有异常类型的基类

NameError

使用未定义的变量引发的异常

IndexError

程序越界访问时引发的异常

AttributeError

使用对象访问不存在的对象引发的异常

FileNotFoundError

未找到指定的文件或者目录引发的异常

2、异常捕获

语法格式

try:
    可能出错的代码
except [异常类型] [as error]:    # 使用as关键字来获取异常的具体信息
    捕获异常后处理的代码
else:
    没有异常的处理代码
finally:
    有无异常都会执行的代码

3、抛出异常

raise

assert

# 格式
assert 表达式 [,异常信息]
# 表达式为False时触发AssertionError异常
# 表达式为True 时不进行任何操作

4、自定义异常

需要继承Exception类

5、补充说明

try—except语句可以有多个except子句

try—except语句只能有一个finally子句