0806 随笔
目录
1.数据类型分类
按存值个数
存一个值: 整型/浮点型/字符串
存多个值: 列表/字典/元组/集合
按有序or无序
有序: 字符串/列表/元祖
无序: 字典/集合
按可变or不可变
可变: 列表/字典/集合
不可变: 整型/浮点型/字符串/元组
2.深浅拷贝
2.1 拷贝(简单的赋值)
当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化,lt内的不可变类型变化,lt2变化。
lt = [1,2,3]
lt2 = lt
lt.append(4)
print(lt)
# 因为列表是可变类型,所以lt的值变化,lt2的值也会跟着变化
print(lt2)
2.2 浅拷贝(copy.copy)
当lt2为lt的浅拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2不变化。
import copy
# lt2没有变化的情况
lt = [1,2,3]
lt2 = copy.copy(lt)
lt.append(4)
print(lt) # [1,2,3,4]
print(lt2) # [1,2,3]
#
lt = [1000,2000,3000,[4000,5000,6000]]
lt2 = copy.copy(lt)
lt[0] += 1
print(lt) # [1001, 2000, 3000, [4000, 5000, 6000, 7]]
print(lt2) # [1000, 2000, 3000, [4000, 5000, 6000, 7]]
# lt2变化的情况
lt = [1000,2000,3000,[4000,5000,6000]]
lt2 = copy.copy(lt)
lt.append(4)
print(lt) # [1,2,3,[4,5,6],4]
print(lt2) # [1,2,3,[4,5,6]]
#
lt = [1000,2000,3000,[4000,5000,6000]]
lt2 = copy.copy(lt)
lt[-1].append(7)
print(lt) # [1,2,3,[4,5,6,7]]
print(lt2) # [1,2,3,[4,5,6,7]]
2.3 深拷贝(copy.deepcopy)
当lt2为lt的深拷贝对象时,lt内的可变类型变化,lt2不变化;lt内的不可变类型变化,lt2不变。
import copy
lt = [1000,2000,3000,[4000,5000,6000]]
lt2 = copy.deepcopy(lt)
lt.append(4)
print(lt) # [1000, 2000, 3000, [4000, 5000, 6000], 4]
print(lt2) # [1000, 2000, 3000, [4000, 5000, 6000]]
lt = [1000, 2000, 3000, [4000, 5000, 6000]]
lt2 = copy.deepcopy(lt)
lt[-1].append(7)
print(lt) # [1000, 2000, 3000, [4000, 5000, 6000], 7]
print(lt2) # [1000, 2000, 3000, [4000, 5000, 6000]]
拷贝/浅拷贝/深拷贝 只针对可变数据类型
3.异常处理
异常:报错
就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)
3.1 语法异常(错误都是SyntaxError)
# if # SyntaxError
# 0 = 1 # SyntaxError
# try:
# if
# except Exception as e: # 语法错误无法捕捉
# print(e)
3.2 逻辑异常(错误类型往往是不一样的)
1/0
dic = {}
print(dic['skjdis']) # KeyError
print(1)
try: # 尝试
print(3) # 代码自上而下,上面会运行
1 / 0 # 错误不影响其他代码,报错马上终止try缩进里面的代码
print(4)
except: # 除此之外
pass
print(1)
try: # 尝试
num = input('输入一个值')
dic = {'0':'a'}
print(dic[num])
print(3) # 代码自上而下,上面会运行
1 / int(num) # 错误不影响其他代码,报错马上终止try缩进里面的代码
print(4)
except ZeroDivisionError as e: # 除此之外 # try里面的代码出了什么错误,就得用什么错误捕捉 # as就是把错误赋值给e
print('e:',e) # 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。
except KeyError as e: # 可以写多个except捕捉多个异常
print('e',e)
## 最重要,以后想捕捉异常就用这个
print(1)
try: # 尝试
num = input('输入一个值')
dic = {'0': 'a'}
print(dic[num])
print(3) # 代码自上而下,上面会运行
1 / int(num) # 错误不影响其他代码,报错马上终止try缩进里面的代码
print(4)
except Exception as e: # Exception可以捕捉任意异常
print('e:', e)
3.3 了解
print(1)
try: # 尝试
1/0
except Exception as e: # Exception可以捕捉任意异常
print('e:', e)
finally: # 最终的意思,无论报不报错都会打印
print(3)
print(2)
# eg:
f = open('test.py','r')
data = f.read()
try:
1/0
print(data)
# def f # 只删除f,变量名,对操作系统的占用不会关闭
except Exception as e:
print('e:',e)
finally:
f.close() # 即删除f的引用,又会命令操作系统关闭对外存文件的占用
# assert 断言,最早的时候没有pycharm,拿这个做调试,用不上了
a = 1
a += 1
assert a == 2 # 条件成立会跳过,条件错误会报AssertionError错误
print(3)
# raise 主动抛错 创建框架/创建语言 C/C++ 有用
raise KeyError('主动抛错')
4.基本的文件处理
什么是文件:操作系统提供给用户的一个虚拟单位
文件有什么用:存储数据
# 打开文件的流程
# 1.找到文件路径
path = r'F:\实习\python\0806\test' # 鼠标右键点击文件,copy path
# 2.双击打开
f = open(path,'w',encoding='utf-8') # r--->read 只读 w--->write 只写,清空当前文件后写入
print(f) # 文件数据类型
# 3.看文件
data = f.read()
print(data)
# 4.写文件
f.write('你好')
# 5.关闭文件
#def f # 只删除了文件的引用以及文件在python内存中的占用,但是没有删除对操作系统的占用
f.close() # 关闭操作系统对文件的占用
5.绝对路径和相对路径
5.1 绝对路径
从根目录(C/D/E盘)开始的这种类型的路径叫做绝对路径
path = r'F:\实习\python\0806\test'
f = open(path, 'w')
f.write('nick handsome')
f.close()
5.2 相对路径
当前文件夹下,可以直接写文件名
path = r'test' # 鼠标右键点击文件,copy path
f = open(path, 'r')
print(f.read())
f.close()
5.3 补充
为什么文件不能既可以读又可以写
假设文件内容为1
1.文件既可以读也可以写
2.在1后面追加2,文件内容变成12(需要10s)
3.在这10s内读文件(5s),读出来的内容是1
4.在1后面追加2,文件内容变成12(需要时间10s),等10s过完文件内容其实是12,就会报错