• day09 深浅拷贝、异常处理、基本文件处理、绝对路径和相对路径


    数据类型分类总结
    1)按存值个数
    存一个值: 整型/浮点型/字符串
    存多个值: 列表/字典/元组/集合

    2)按有序or无序
    有序: 字符串/列表/元祖
    无序: 字典/集合

    3)按可变or不可变
    可变: 列表/字典/集合
    不可变: 整型/浮点型/字符串/元组

    Python深浅拷贝
    1)拷贝(赋值)
    lt = [1, 2, 3]
    lt2 = lt
    lt.append(4)

    print(lt) # [1, 2, 3, 4]
    print(lt2) # [1, 2, 3, 4]
    因为列表是可变类型,所以lt的值变化,lt2的值也会跟着变2)浅拷贝
    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]


    lt2变化的情况
    lt = [1, 2, 3, [4, 5, 6]]
    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[-1].append(7)
    print(lt) # [1, 2, 3, [4, 5, 6, 7]]
    print(lt2) # [1, 2, 3, [4, 5, 6, 7]]


    3)深拷贝
    import copy
    lt = [1, 2, 3, [4, 5, 6]]
    lt2 = copy.deepcopy(lt)

    lt.append(4)
    print(lt) # [1, 2, 3, [4, 5, 6], 4]
    print(lt2) # [1, 2, 3, [4, 5, 6]]
    lt[-1].append(7)
    print(lt) # [1, 2, 3, [4, 5, 6, 7]]
    print(lt2) # [1, 2, 3, [4, 5, 6]]
    牢记: 拷贝/浅拷贝/深拷贝 只针对可变数据类型

    拷贝: 当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化
    简单的赋值

    浅拷贝:当lt2为lt的浅拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2不变化
    copy.copy() 可变数据的类型中的内置方法.copy()

    深拷贝: 当lt2为lt的深拷贝对象时,lt内的可变类型变化,lt2不变化;lt内的不可变类型变化,lt2不变
    copy.deepcopy()

    毫无应用,面试经常问




    异常处理
    语法异常(错误都是SyntaxError)
    if # SyntaxError
    0 = 1 # SyntaxError
    逻辑异常(错误类型往往是不一样的)
    1/0
    dic = {}
    print(dic['skldfj']) # KeyError

    except:
    try: # 尝试
    num = input('输入一个值') # 123124
    dic = {'0': 'a'}
    print(dic[num]) # dic['123124']

    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)


    exception:
    最重要,以后想捕捉异常就用这个,只要记住这个就够用了
    print(1)
    try: # 尝试
    num = input('输入一个值') # 123124
    dic = {'0': 'a'}
    print(dic[num]) # dic['123124']

    print(3) # 代码自上而下,上面会运行
    1 / int(num) # 错误不影响其他的代码,报错马上终止try缩进里面的代码
    print(4)

    except Exception as e: # Exception可以捕捉任意异常,语法错误无法捕捉
    print('e:', e)


    接下来讲的也是了解部分
    finally:
    print(1)
    try: # 尝试
    1 / 1
    except Exception as e:
    print('e:', e)
    finally: # 最终的意思,无论报不报错都会打印 明天讲文件处理的时候带着你用
    print(3)

    assert: 断言,最早的时候没有pycharm,那这个做调试,一辈子都用不上了

    a = 1
    a += 1
    assert a == 3 # 条件成立会跳过,条件错误会报AssertionError错误
    print(3)


    raise: 主动抛错,没有用. 创建框架/创建语言 C/C++ 有用

    print(1)
    raise ZeroDivisionError('主动抛错干嘛')
    print(2)


    基本文件处理
    什么是文件:操作系统提供给用户的一个虚拟单位

    文件有什么用: 存储数据

    打开文件的流程
    1) 找到文件路径
    path = r'D:上海Python11期视频python11期视频day 09 est.py' # 鼠标右键点击文件,copy path

    2) 双击打开
    f = open(path, 'w') # r-->read 只读 ; w-->只写,清空当前文件后写入,自动创建文件
    print(f) # 文件数据类型

    3) 看文件
    data = f.read()
    print(data)

    4) 写文件.
    f.write('nick handsome')

    5) 关闭文件
    del f # 只删除了文件的引用以及文件在python内存中的占用,但是没有删除对操作系统的占用
    f.close() # 会命令操作系统对外存文件的占用


    绝对路径和相对路径
    绝对路径:这种类型的叫做绝对路径,从根目录(C/D/E盘)开始

    path = r'D:上海Python11期视频python11期视频day 09 est.py' # 鼠标右键点击文件,copy path

    相对路径:(当前文件夹下,可以直接写文件名)
    path = r'test.py'

    为什么不能对文件又读又写?
    假设文件内容为 1
    1. 文件既可以读又可以写

    2. 在1后面追加2,文件内容变成12(需要时间10s)

    3. 在这10s内读文件(5s),读出来的内容是1

    4. 在1后面追加2,文件内容变成12(需要时间10s),等10s过完文件内容其实是12,就会报错

    
    
     
  • 相关阅读:
    线段树扫描线求矩形面积并
    BZOJ-1103 [POI2007]大都市meg 【DFS序+树状数组】
    安徽大学第九届程序设计竞赛决赛题解
    如何解决Vue.js里面noVNC的截图问题(2)——蛋疼的cookies验证和node.js的websocket代理
    如何解决Vue.js里面noVNC的截图问题(1)——论可以跨域的webSocket
    从技术人视角看闪电网络之作用和局限性,以及一些问题的回答
    从技术人视角看闪电网络之闪电路由
    从技术人视角看闪电网络之微支付通道
    微服务化的大坑之一:当dubbo神器碰上共用注册中心和错误的暴露接口
    Fun论设计模式之1:简单工厂模式(Factory Pattern)
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11311337.html
Copyright © 2020-2023  润新知