• Python进阶(三)


    数据类型分类

    一、按存值个数

    存一个值:整型/浮点型/字符串

    存多个值:列表/字典/元组/集合

    二、按有序or无序

    有序:字符串/列表/元组

    无序:字典/集合

    三、按可变or不可变

    可变:列表/字典/集合

    不可变:整型/浮点型/字符串/元组

    Python深浅拷贝

    在python中,对象赋值实际上是对象的引用。python并没有拷贝这个对象,而是拷贝了这个对象的引用。

    在python中,分为拷贝(赋值)、浅拷贝、深拷贝

    注意:拷贝/浅拷贝/深拷贝都是针对可变数据类型而言的

    然后这个毫无应用,就是面试经常问到

    一、拷贝

    当lt2是lt1的拷贝对象时,lt1内的可变数据类型发生变化,lt2变化;lt1内的不可变数据类型发生变化,lt2也变化。

    就是简单的赋值。

    # 不可变数据类型发生变化
    lt1 = [1, 2, 3, [4, 5, 6]]
    lt2 = lt1
    lt1.append(7)
    
    print(f'lt1:{lt1}')
    print(f'lt2:{lt2}')
    
    # lt1:[1, 2, 3, [4, 5, 6], 7]
    # lt2:[1, 2, 3, [4, 5, 6], 7]
    
    # 可变数据类型发生变化
    lt1 = [1, 2, 3, [4, 5, 6]]
    lt2 = lt1
    lt1[3].append(7)
    
    print(f'lt1:{lt1}')
    print(f'lt2:{lt2}')
    
    # lt1:[1, 2, 3, [4, 5, 6, 7]]
    # lt2:[1, 2, 3, [4, 5, 6, 7]]
    

    二、浅拷贝

    当lt2为lt1的浅拷贝对象时,lt1内的可变数据类型发生变化,lt2变化;lt1内的不可变数据类型发生变化,lt2不变化。

    浅拷贝是使用copy包中的copy()方法

    # 不可变数据类型发生变化
    import copy
    lt1 = [1, 2, 3, [4, 5, 6]]
    lt2 = copy.copy(lt1)
    lt1.append(7)
    
    print(f'lt1:{lt1}')
    print(f'lt2:{lt2}')
    
    # lt1:[1, 2, 3, [4, 5, 6], 7]
    # lt2:[1, 2, 3, [4, 5, 6]]
    
    # 可变数据类型发生变化
    import copy
    lt1 = [1, 2, 3, [4, 5, 6]]
    lt2 = copy.copy(lt1)
    lt1[3].append(7)
    
    print(f'lt1:{lt1}')
    print(f'lt2:{lt2}')
    
    # lt1:[1, 2, 3, [4, 5, 6, 7]]
    # lt2:[1, 2, 3, [4, 5, 6, 7]]
    

    三、深拷贝

    当lt2为lt1的深拷贝对象时,lt1内的可变数据类型发生变化,lt2不变化;lt1内的不可变数据类型发生变化,lt2不变化。

    深拷贝是使用copy包中的deepcopy()方法

    # 不可变数据类型发生变化
    import copy
    lt1 = [1, 2, 3, [4, 5, 6]]
    lt2 = copy.deepcopy(lt1)
    lt1.append(7)
    
    print(f'lt1:{lt1}')
    print(f'lt2:{lt2}')
    
    # lt1:[1, 2, 3, [4, 5, 6], 7]
    # lt2:[1, 2, 3, [4, 5, 6]]
    
    # 可变数据类型发生变化
    import copy
    lt1 = [1, 2, 3, [4, 5, 6]]
    lt2 = copy.deepcopy(lt1)
    lt1[3].append(7)
    
    print(f'lt1:{lt1}')
    print(f'lt2:{lt2}')
    
    # lt1:[1, 2, 3, [4, 5, 6, 7]]
    # lt2:[1, 2, 3, [4, 5, 6]]
    

    异常处理

    一、什么是异常

    异常就是程序运行时发生错误的信号(在程序出现错误时,会产生一个异常,如果程序没有处理它,就会抛出这个异常,程序的运行也会随之终止)

    1.1 语法错误

    语法错误,根本过不了python解释器的语法检测,必须在程序执行前就改正。

    if
    	pass
    # 语法错误都是SyntaxError,且无法被捕捉
    
    1.2 逻辑错误
    1/0
    # 逻辑错误的错误类型往往是不一样的
    

    二、异常处理

    print(1)
    try: # 尝试
        print(2)
        1 / 0	# 错误不会影响其他的代码,但报错会马上终止try缩进里的代码
        print(3)
    except: # 除此之外
        pass
    print(4)
    
    # 1
    # 2
    # 4
    
    print(1)
    try:
        print(2)
        1 / 0
        print(3)
    except ZeroDivisionError as e: # try里面的代码出了什么错误,就得用什么错误捕捉,as是把错误赋值给e,可以写多个except捕捉多个异常
        print('e:', e)
    print(4)
    
    # 1
    # 2
    # e: division by zero
    # 4
    
    # 最重要的,以后想捕捉异常就用这个
    print(1)
    try:
        print(2)
        1 / 0
        print(3)
    except Exception as e: # Exception可以捕捉任意异常
        print('e:', e)
    print(4)
    
    # 1
    # 2
    # e: division by zero
    # 4
    

    三、了解部分

    3.1 断言

    assert,断言,在最早没有pycharm的时候,用这个来做调试,现在已经用不到了

    3.2 抛出异常

    raise,主动抛出异常,没有用,创建框架/创建语言有用

  • 相关阅读:
    Android10_内容提供者_内容观察者_标题栏
    Android08_广播接受者_服务
    Android09_远程服务_系统服务_aidl
    Android07_多界面_Activity生命周期
    Android06_getpost提交_文件上传_多线程下载
    Android_handler_网络请求_img框架
    Android开发04
    java 正则表达式验证邮箱
    postman 基本用法
    java 微信申请退款的开发
  • 原文地址:https://www.cnblogs.com/yunluo/p/11310437.html
Copyright © 2020-2023  润新知