• python进阶

    一、数据类型分类

    1.1 按存值个数区分

    ​ 存多个值(容器):列表、元组、字典、集合

    ​ 存单个值:整形、浮点型、字符串

    1.2 按可变不可变区分

    ​ 可变:字典、集合、列表

    ​ 不可变:数字、字符串、元组

    1.3 按有序无序区分

    ​ 有序:字符串、列表、元组

    ​ 无序:字典、集合

    1.4 按访问类型区分

    ​ 直接访问:数字

    ​ 顺序访问(序列访问):字符串、列表、元组

    ​ key值访问(间接访问):字典

    二、python深潜拷贝

    ​ 在python中,对象赋值实际上是对象的引用。创建一个对象,把它赋给另一个变量,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

    2.1 拷贝

    ​ l2是l1的拷贝对象,l1内的任何数据变化,都会引起l2内的数据进行变化,l1、l2的id相同。

    l1 = [1,2,3,4]
    l2 = l1
    l1.append(5)
    print(l1)
    print(l2)
    print(id(l1))
    print(id(l2))
    
    [1, 2, 3, 4, 5]
    [1, 2, 3, 4, 5]
    2389714688328
    2389714688328
    

    2.2 浅拷贝

    ​ l2是l1的浅拷贝对象,l1内的不可变元素发生改变,l2不发生改变;如果l1内的可变元素发生了改变,则l2会跟着改变。

    import copy
    l1 = [1,2,3,[4,5,6]]
    l2 = copy.copy(l1)
    l1.append(7)
    print(l1)
    print(l2)
    print(id(l1))
    print(id(l2))
    
    [1, 2, 3, [4, 5, 6], 7]
    [1, 2, 3, [4, 5, 6]]
    2209074390984
    2209074391816
    
    import copy
    l1 = [1,2,3,[4,5,6]]
    l2 = copy.copy(l1)
    l1[3].append(7)
    print(l1)
    print(l2)
    print(id(l1))
    print(id(l2))
    
    [1, 2, 3, [4, 5, 6, 7]]
    [1, 2, 3, [4, 5, 6, 7]]
    2207936817096
    2207936817928
    

    2.3 深拷贝

    ​ l2是l1的深拷贝对象,l1内的不可变元素发生改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。

    import copy
    l1 = [1,2,3,[4,5,6]]
    l2 = copy.deepcopy(l1)
    l1.append(7)
    print(l1)
    print(l2)
    print(id(l1))
    print(id(l2))
    
    [1, 2, 3, [4, 5, 6], 7]
    [1, 2, 3, [4, 5, 6]]
    1654809896904
    1654809897736
    
    import copy
    l1 = [1,2,3,[4,5,6]]
    l2 = copy.deepcopy(l1)
    l1[3].append(7)
    print(l1)
    print(l2)
    print(id(l1))
    print(id(l2))
    
    [1, 2, 3, [4, 5, 6, 7]]
    [1, 2, 3, [4, 5, 6]]
    1728501852104
    1728501852936
    

    三 、异常处理

    ​ 异常就是程序运行时发生错误的信号

    3.1 语法错误

    if  # SyntaxError
    

    ​ 语法错误报错都是SyntaxError。

    3.2 逻辑错误

    1/0  #ZeroDivisionError: division by zero
    

    ​ 逻辑错误的报错都是不一样的。

    3.3 常见的异常

    • AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    • IOError 输入/输出异常;基本上是无法打开文件
    • ImportError 无法引入模块或包;基本上是路径问题或名称错误
    • IndentationError 语法错误(的子类) ;代码没有正确对齐
    • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    • KeyError 试图访问字典里不存在的键
    • KeyboardInterrupt Ctrl+C被按下
    • NameError 使用一个还未被赋予对象的变量
    • SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    • TypeError 传入对象类型与要求的不符合
    • UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
    • ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    3.4 异常的处理

    ​ 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:  # 未捕获到异常,程序直接报错
        print(e)
    

    ​ 多分支结构

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    invalid literal for int() with base 10: 'hello'
    

    ​ 万能异常Exception

    s1 = 'hello'
    try:
        int(s1)
    except Exception as e:
        print(e)
    

    ​ 异常的最终执行

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    #except Exception as e:
    #    print(e)
    else:
        print('try内代码块没有异常则执行我')
    finally:
        print('无论异常与否,都会执行该模块,通常是进行清理工作')
    

    ​ try...except是最重要的异常捕捉的方式,而Exception可以捕捉任何异常。

    3.5 raise抛出异常(了解)

    try:
        raise TypeError('抛出异常,类型错误')
    except Exception as e:
        print(e)
    

    3.6assert断言(了解)

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

    ​ 断言是最早没有pycharm时做调试用的,所一现在基本没有用。

    文件处理

    一、基本文件操作

    1.1 什么是文件

    ​ 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位。文件的操作是基于文件,即文件的操作核心就是读和写。

    1.2打开文件流程

    ​ 如果我们需要打开一个文件,需要向操作系统发起请求,要求操作系统打开文件,占用操作系统资源。Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。

    1.2.1 找到文件路径

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

    1.2.2 双击打开

    f = open(path, 'w')  # r-->read 只读 ; w-->只写,清空当前文件后写入print(f)  # 文件数据类型
    

    1.2.3 看文件

    data = f.read()
    print(data)
    

    1.2.4 写文件

    f.write('nick handsome')
    

    1.2.5 关闭文件

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

    二、绝对路径和相对路径

    2.1 绝对路径

    ​ Windows系统绝对路径从盘符(C:、D:)开始写一个完整的路径。

    2.2 相对路径

    ​ 相对于当前执行文件所在的文件夹开始找。

  • 相关阅读:
    redis数据持久化
    redis安全:给redis设置密码
    redis命令总结
    redis事务
    redis发布订阅
    Java中的日期
    链式队列
    删除链表中的结点(链表)、比较含退格的字符串(栈)、棒球比赛(栈)
    物理层
    链式栈
  • 原文地址:https://www.cnblogs.com/tangceng/p/11310516.html
Copyright © 2020-2023  润新知