zoukankan      html  css  js  c++  java
  • 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,就会报错

    
    
     
  • 相关阅读:
    JSOI 2008 火星人prefix
    OI 中的 FFT
    浅谈最大化子矩阵问题
    qq空间答案
    若瑟夫问题
    [颓废] 改某人的WebGL light mapping demo并9xSSAA
    Codeforces Round #402 (Div. 2) C. Dishonest Sellers
    Codeforces Round #402 (Div. 2) D. String Game
    Codeforces Round #401 (Div. 2) E. Hanoi Factory
    Codeforces Round #401 (Div. 2) D. Cloud of Hashtags
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11311337.html
Copyright © 2011-2022 走看看