Python

一、相关说明

二、Python知识学习框架

  • 基础知识(1)

    • 源文件的字符编码

      • 默认编码UTF-8
      • 不使用默认编码,则要声明文件的编码,一般情况下写在文件的第一行
        • # -*- coding: encoding -*-
    • 变量的命名

      • 变量名只能包含字母、数字和下划线
      • 变量名以字母或下划线开头,不能以数字开头
      • 变量名不能包含空格,使用下划线来分隔单词
      • Python关键字和函数名不能用作变量名
    • 基本规则

      • #
      • ‘’’ ‘’’
      • 缩进
      • 空行

      提示:# 单行注释,’’’ ‘’’多行注释

    • 变量赋值

      • 赋值符

        =

      • 增量赋值

        +=

      • 多重赋值

        x=y=z=1

      • 多元赋值

        x,y,z=1,2.0,’a’

    • 运行python

      • 两种模式

        • 脚本式编程
        • 交互式编程
      • 运行脚本

        命令行模式

  • 基础知识(2)

    • 标识符

      • 标识符

        计算语言中允许作为名字的有效字符串集合

      • 特殊标识符

        • 关键字

          • 保留字

            不允许另用

          • import keyword

            • 查看所有
            • 判断是否
              • keyword.kwlist
              • keyword.iskeyword()
        • 专用下划线标识符

          • 特殊变量

            • 下划线(_)作为

              变量前缀&后缀

          • 特殊用法

            • _xxx

              • 不能直接访问的类属性
              • 通过类提供的接口进行访问
            • __xxx__

              • 特殊变量

                系统定义的名字

              • Python

                特殊方法专用标识

            • __xxx

              • 私有变量

                仅用于类中

      • 合法标识符

        • 第一个字符

          字母/下划线(_)

        • 其余字符

          字母/数字/下划线(_)

    • 对象属性

      • Pyhton使用对象类型来存储数据

      • 特性

        • 身份

        • 类型

          type()

      • 对象属性

        • 访问

          .

        • 常用

          • 属性
          • 方法
    • 动态类型

    • 内存管理

      • 变量

        • 在计算机内存中的表示
          • a=’ABC’
            • 在内存中
              • 创建了一个’ABC’的字符串
            • 在内存中
              • 创建了一个名为a的变量并把它指向’ABC’
          • b=a
            • 创建了一个名为的变量并把它指向a指向的字符串’ABC’
          • a=’XYZ’
            • 创建了一个’XYZ’的字符串并把a指向改为’XYZ’
          • print(b
            • b的指向并没有更改
            • →’ABC’
        • 本质上
          • 变量用来指向数据对象
          • 计算机内部把任何数据都看成一个对象
          • 对变量赋值关联数据对象和变量
      • 常量

        全部大写的变量名(本质上还是变量)

      • del语句

        删除对象的一个引用

    • IO编程

      • print()
        • 打印到屏幕
        • print(a,b)
          • 依次打印
          • 遇到,输出一个空格
      • input()
        • 读取键盘输入
        • input()
          • 可以接收Python表达式
          • 返回运算结果
    • 模块结构&布局

  • 数据类型

    • 类型

      • 概念

        指的是数据的分类,它定义了数据的存储方式、可以执行的操作以及数据的表现形式

      • 作用

        对数据的一种划分

    • 标准类型

      • 标准数据类型

        • 数字
          • 整型(int)
          • 浮点型(float)
          • 布尔型(bool)
          • 复数(complex)
        • 字符串
        • 列表
        • 元组
        • 集合
        • 字典
      • 标准类型操作符

        • 算术运算符

          • +,-,*,/
          • %
          • **
          • //
        • 比较运算符

          • ==,!=
          • >,>=,<,<=
        • 赋值运算符

          • =
          • +=,-=,*=,/=,%=,**=,//=
        • 位运算符

          • &,|,^,-
          • <<,>>
        • 逻辑运算符

          and,or,not

        • 成员运算符

          in,not in

        • 身份运算符

          is,is not

      • 内置函数

        • type()
        • isinstance()
        • cmp(a,b)
          • a>b 返回1
          • a<b 返回-1
          • a=b 返回0
        • str()/repr()
        • dir()
  • 数值类型

    • 分类

      • 整数类型

        • 0X

          16进制

        • 0B

          2进制

        • 0O

          8进制

      • 浮点数类型

      • 复数类型

        • z=a+bj

          • a

            实数部分z.real

          • b

            虚数部分z.imag

    • 关系

      • 整数→浮点数→复数
      • 互相转换
        • int()
        • float()
        • complex()
    • 内置函数

      • abs()

      • ceil()/floor()

        上入整数/下舍整数

      • divmod()

        • 返回元组
          • num1/num2
          • num1%num2
      • pow()

        指数

      • round()

        四舍五入

    • 随机数

      • randint()

        随机整数

      • randrange()

        指定范围内取随机数

      • uniform(x,y)

        • 随机浮点数

          [x,y]

      • random()

        • 随机浮点数

          [0,1)

      • choice()

        随机序列中的一个元素

      • shuffle(lst)

        将序列所有元素随机排序

      • seed([x])

    • 其他

      • 空值
        • None
        • 注意
          • 不能理解为0
            • 0有意义
            • None为特殊空值
  • 序列

    • 内涵

      • 有序排列
      • 包括
        • str
        • list
        • tuple
    • 操作符

      • 标准类型操作符

        (数据类型-标准类型-标准类型操作符)均适用

      • 序列类型操作符

        • 关系

          • in

          • not in

            1
            obj in seq  # 输出: True/False
        • 连接

          • +(推荐使用seq1.extend(seq2))
            • seq1 + seq2
        • 重复

            • seq * expr
        • 切片

          • [],[:],[::]
            • seq[index]
            • seq[index1:index2]
          • 基本样式
            • [下限:上限:步长]
            • 上限本身不包括在内(开区间)
          • 拓展样式
            • 倒数切片
              • s[-10:-1]
              • s[-2:]
            • 逆序
              • [::-1]
            • 隔一取一
              • s[::2]
            • 全选
              • s/s[:]/s[::]/s[:None]/s[None:]
          • 注意
            • 切片索引可超过序列长度
            • range(-1,-4,-1)
              • 返回[-1 , -2 , -3]
      • 内置函数

        • 类型转换

          • list()
          • str()
          • tuple()
          • set()
        • 可操作内置函数

          • len()
          • reversed()
          • sum()
          • zip()
          • enumerate()
          • sorted()
          • max()
          • min()
        • 其他操作

          • all(s)

            返回True,如果所有元素都为True

          • any(s)

            返回True,如果任一元素为True

          • s.count(x)

            返回x在s中出现的次数

          • s.index(x)

            返回x在s中第一次出现的下标(索引)

  • 字符串

    • 操作符

      • 标准类型操作符

        (数据类型-标准类型-标准类型操作符)均适用

      • 序列操作符

          • 连接多个字符串
          • join()性能更佳
      • 格式化操作符

        • 百分号格式化
        • str.format() 方法
      • 原始字符操作符(r/R)

        • r’’(’’内部字符默认不转义)
      • Unicode字符串操作符(u/U)

        • u’’
    • 独特特性

      • 特殊字符串

        • \n

          换行

        • \t

          制表符

        • \\

          反斜杠

          • \
        • \r

          回车

      • ‘’’ ‘’’

        • 多行内容
      • 不可变性

        • 指向永远不变
        • 改变一个字符串元素需要创建字符串
      • 注意

        • 单引号和双引号用法相同均表示字符串
        • 字符串可看作特殊的元组
    • 编码问题

      • 概念

        • 1bit(位)

          0/1 两种可能性

        • 1byte(字节)

          • =8bit
          • 2^8=256种可能性
      • 背景知识

        • ASCII

          • 1个字节8位
          • 字符集–英文字符+常见符号
        • Unicode

          • 2个字节16位

          • 字符集–世界文字字符

          • 变长编码方式

            • UTF-32

              统一4个字节

            • UTF-16

              • 常用字符(基本多文种平面,BMP)2个字节
              • 超出BMP的字符(辅助平面)4个字节
            • UTF-8

              • 英文1个字节
              • 中文3个字节
              • 生僻字符4-6个字节
        • 汉字

          • DBCS
            • GB2312
            • GBK
            • GB18030
          • 127号
            • 之前–半角字符
            • 之后–全角字符
      • 计算机只能处理数字

        • 文本→数字
        • Unicode(字符集)→UTF-8(可变长编码方式)
      • Python

        • 类型

          • UTF-8

            3.X版本(默认编码)

          • ASCII

            2.X版本(默认编码)

        • 指定方式

          • # -*- coding: utf-8 -*-
        • 转换

          • Unicode字符串转换为UTF-8

            .encode(‘utf-8’)

          • UTF-8转换为Unicode字符串

            .decode(‘utf-8’)

    • 内置函数

      • 内置函数

        • 查看所有内置函数

          dir(str)

        • 更改显示方式

          • 大小写
            • str.upper()
              • 小写字母转换为大写字母
            • str.lower()
              • 大写字母转换为小写字母
            • str.capitalize()
              • 第一个字母转换为大写,其余字母转换为小写
            • str.title()
              • 首字母转换为大写,其余字母转换为小写
            • str.swapcase()
              • 大写字母转换为小写,小写字母转换为大写
          • 宽度
            • str.center(width)
              • 居中
            • str.ljust(width)/str.rjust(width)
              • 左/右对齐
            • str.zfill(width)
              • 用0填充,字符串以正号或负号开始,考虑符号
          • 编码
            • str.encode()
            • str.decode()
        • 检查

          • str.count()
          • str.find(str)/str.rfind()
          • str.index()/str.rfind()
          • str.endswith()/str.startswith()
            • 检查字符串是否以指定的后缀结束
            • 检查字符串是否以指定的前缀开始
          • str.isalnum()/str.isalpha()/str.isdigit()/str.islower()/str.isspace()/str.istitle()/str.isupper()
            • 检查字符串是否至少有一个字符(字母或数字)
            • 检查字符串是否只包含字母字符
            • 检查字符串是否只包含数字
            • 检查字符串是否只包含小写字母
            • 检查字符串是否只包含空白字符(空格、制表符、换行符等)
            • 检查字符串是否单词首字母大写,其余字母小写
            • 检查字符串是否只包含大写字母
        • 修改

          • str.expandtabs(tabsize=8)
            • 用于将字符串中的制表符(\t)扩展为空格
            • 将制表符扩展为多少个空格的宽度,默认值为8
            • 如果tabsize参数小于1,设置为1
            • 如果tabsize参数大于8,扩展为相应数量的空格
          • str.replace(‘a’,’A’)
            • 修改字符串中的特定部分
          • str.strip()/str.lstrip()/str.rstrip()
            • 去除字符串两端的空白字符或其他指定的字符
            • 去除字符串左侧的空白字符或其他指定的字符
            • 去除字符串右侧的空白字符或其他指定的字符
          • str.split()/str.rsplit()/splitlines()
            • 字符串(默认以空格)分割成一个列表
            • 字符串右侧开始分割成一个列表
            • 不接收任何参数,根据\n、\r分割字符串
          • str.partition()/str.rpartition()
            • 字符串开始搜索分隔符进行分割
            • 字符串末尾搜索分隔符进行分割
          • str.join()
            • 序列中的元素连接成一个字符串
        • 格式化字符串

  • 列表 | 元组

    • 列表(list)

      • 元素可变,操作会影响原表

      • 操作符

        • 序列类型操作符

          • [] & [:]
          • in & not in
          • +(推荐使用list1.extend(list2))
        • 列表解析

        • 内置函数

          • 序列类型

            • len()/sum()/max()/min()
            • sorted()/reversed()
            • enumerate()/zip()
            • list()
          • 列表类型

            • list.count()

            • list.index()

            • list.append()

              末尾追加

            • list1.extend(list2)

              list1末尾添加list2所有元素

            • list.insert()

              • 指定位置插入元素

              • list.insert(i,X)

                插入元素X到指定位置i处

            • list.remove()

            • list.pop()

              • 删除末尾元素

              • list.pop(i)

                删除指定位置i的元素

            • list.clear()

            • list.copy()

            • list.sort()/list.reverse()

              排序/逆序

        • 注意

          • 用于改变对象值的可变对象的方法
            • 无返回值
            • 直接修改原对象
    • 元组(tuple)

      • 元素不可变,一旦初始化不能修改

      • 操作符

        • 序列类型操作符
      • 内置函数

        • 序列类型

          len()

        • 元组类型

          • tuple.index()
          • tuple.count()
      • 注意

        • 单元素元组tuple = (1,)
        • 字典的键值可作为元组
    • 拷贝问题

      • 浅拷贝

        • 概念
          • 创建了一个新的对象
          • 复制的是原始对象中元素的引用,不是元素本身
          • 原始对象中的元素是可变的,拷贝后的对象中对应的元素会受到影响
        • 拷贝
          • list.copy()/list[:]
          • dict.copy()
          • copy.copy()
      • 深拷贝

        • 概念

          • 创建了一个新的对象
          • 递归地复制了原始对象中的所有对象
          • 深拷贝的对象,修改其中一个不会影响另一个
        • 拷贝

          copy.deepcopy()

      • 注意

        • 不可变数据类型(元组、字符串、数字等)
        • 浅拷贝和深拷贝之间没有区别
  • 字典 | 集合

    • 字典(dict)

      • 操作

        • 创建

          • ={}
          • ={key:value,key:value}
          • =dict(([key,value],[key,value]))
          • ={}.fromkeys((key1,key2),value)
        • 访问

          • 返回键dict.keys()
          • 返回值dict.values()
          • 返回键值对dict.items()
        • 判断key是否存在

          • in/not in
          • dict.get(key)
            • dict.get(key)
              • 存在返回值
              • 不存在返回None
            • dict.get(key,-1)
              • 存在返回值
              • 不存在返回-1
        • 删除key

          • dict.pop(key)/dict.popitem()

            • 移除字典中指定键的项

              返回值

            • 移除字典中的最后一项

              返回最后一项键值对

          • del dict[key]

        • 清空dict

          • dict.clear()
          • del dict
      • 内置函数

        • 标准类型

          • type()
          • str()
        • 相关函数

          • dict()
          • len()
          • hash()
            • 判断是否可哈希
            • 可哈希才可作为字典的键
        • 内置函数

          • 返回迭代器

            • 返回键dict.keys()
            • 返回值dict.values()
            • 返回键值对dict.items()
          • 其他

            • dict.copy()

              浅复制

            • dict.get(key,default=X)

              • 获取字典中指定键对应的值
              • default可选参数
                • 键存在时,返回对应的值
                • 键不存在时,返回X
                • 未选该参数,默认为 None
            • dict.setdefault(key,default=X)

              • 获取字典中指定键对应的值
              • default可选参数
                • 键存在时,返回对应的值
                • 键不存在时,添加键到字典中,其值设置为提供的默认值X,返回X
                • 未选该参数,默认为 None
            • dict1.update(dict2)

              • dict2中键X已存在于dict1中

                值被更新为键X对应的值

              • dict2中键Y不存在于dict1中

                把键Y以及Y对应的值添加到dict1中

      • dict vs list

        • dict
          • 查找速度极快,不会随key增加而变慢
          • 占用大量内存
        • list
          • 顺序查找,速度随元素增加变慢
          • 占用内存少
      • 注意

        • key必须是可哈希的,不可变对象(均可哈希)
          • 字符串、数值
          • 元组(只能包括不可变类型)
    • 集合(set)

      • 无序的、不包含重复元素
      • 分类
        • 可变集合–set
        • 不可变集合–frozenset
      • 操作符
      • 内置函数
      • set vs tuple
  • 条件 | 循环

    • 条件

      • if语句

        • if 条件: …

          1
          2
          if 条件:
          # 条件为真时执行的代码块
        • if 条件: … else: …

          1
          2
          3
          4
          if 条件:
          # 条件为真时执行的代码块
          else:
          # 条件为假时执行的代码块
        • if 条件1: … 条件2: … else: …

          1
          2
          3
          4
          5
          6
          7
          if 条件1:
          # 条件1为真时执行的代码块
          elif 条件2:
          # 条件1为假且条件2为真时执行的代码块
          # 可以有多个elif分支
          else:
          # 所有条件都为假时执行的代码块
      • 条件表达式(三元操作符)

        • X if 条件 else Y
        • 基于条件的真值选择X或Y
    • 循环

      • 循环

        • while
        • for
        • 注意
          • while…else
          • for…else
      • 循环控制

        • break

          停止执行整个循环

        • continue

          跳过本次执行,进入下一次循环

        • pass

          • 空语句
          • 用于
            • if/elis/else
            • while/for
            • def/class
            • try/except/finally
    • 内置函数

      • range()

        • 完整语法
          • range(start,end,step=)
        • 简略语法
          • range(end)
          • range(start,end)
      • enumerate()

      • reversed()

        反序访问

      • zip()

      • sorted()

    • 迭代器

    • 生成器

  • 文件对象

    • 概念

      • 文件只是连续的字节序列
      • 用来访问
        • 普通的磁盘文件
        • 类文件(打开的URL读取的Web页面)
    • 内建函数

      • open()

        • 参数

          open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

          • 参数含义

            • file

              文件路径或文件对象

            • mode(指定文件打开模式)

              • ‘r’

                只读模式,默认

              • ‘w’

                写入模式,会覆盖文件(文件已存在)内容

              • ‘a’

                追加模式,会在文件末尾追加内容

              • ‘b’

                二进制模式,用于读写二进制文件

              • ‘+’

                可以用于读写模式

            • buffering

              指定缓冲方式

            • encoding

              指定文件编码

            • errors

              指定编码错误的处理方式

            • newline

              指定如何处理不同操作系统的换行符

            • closefd

              用于指示在文件关闭时是否关闭底层文件描述符

            • opener

              指定使用自定义方式打开文件

          提示:buffering、encoding、errors、newline、closefd、opener这几个参数很少用

        • 返回file对象

    • 内建方法

      • 输入

        • file.read(size)
          • size读取的最大字节数
          • 未指定或设置为None,读取整个文件内容
        • file.readline()/file.readlines
          • 读取文件的一行
          • 读取文件的所有行
      • 输出

        • file.write()/file.writelines()
          • 字符串写入到文件中
          • 字符串序列写入到文件中
      • 定位

        • file.seek(offset,whence=X)

          • 移动文件对象的当前位置指针
          • offset
            • offset移动的字节数
            • 正值表示向前移动,负值表示向后移动
          • whence=X
            • 指定移动的起始位置
            • 0(默认)–文件开头
            • 1–当前文件位置
            • 2–文件末尾
        • file.tell()

          返回文件对象的当前位置

      • 其他

        • file.close()

        • file.flush()

          强制将文件对象内已写入的数据从缓冲区(buffer)写入到文件系统

        • file.truncate(size)

          • 裁剪文件
          • 未指定或为None,默认裁剪到当前位置
    • 内建属性

      • file.closed

        • 文件是否关闭

          True/False

      • file.encoding

        文件编码

      • file.mode

        文件模式

      • file.name

        文件的名称或路径

  • 错误 & 异常

    • 概述

      • 错误
        • 语法错误
        • 逻辑错误
      • 异常
        • 由于程序错误在正常控制流以外采取的行为
        • 两个阶段
          • 检测到错误(解释器触发异常)
          • 调用不同操作(处理异常)
        • 常见类型
          • BaseException
            • KeyboardInterrupt
              • 用户中断(通常是Ctrl+C)
            • SystemExit
              • 解释器请求退出
            • Exception
              • NameError
                • 引用了未定义的变量
              • ZeroDivisionError
                • 除以零时
              • SyntaxError
                • 语法错误
              • IndexError
                • 索引超出序列的范围
              • KeyError
                • 访问不存在的键
              • AttributeError
                • 访问未知的对象属性
          • 所有的错误类型都继承自BaseException
    • 异常处理

      • try: … except exception1: … except exception2: … except: … else: … finally: …

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        try:
        ...
        except exception1:
        ...
        except exception2:
        ...
        except:
        ...
        else:
        ...
        finally:
        ...
        • try

          • 需要检测的代码
          • 若有异常发生
            • 层层比较
              • except exception1
              • except exception2
            • 直到找到归属执行语句
          • 语句块中异常发生点后的剩余语句永远不会到达
        • except

          • 语法

            except Exception [as var]

          • 用法

            • 捕获多个异常

              • except [Exception1,…ExceptionN] [as var]
              • 放入一个元组
            • 捕获所有异常

              • except

                空except子句

              • except Exception

              • except BaseException

          • 捕获后忽略错误

            except Exception: pass

        • else

        • finally

          无论是否有异常最后都要执行

      • 流程

        • try→异常→except→finally
        • try→无异常→else→finally
      • try-except vs try-finally

        • try-except

          异常捕获和多条件错误处理

        • try-finally

          确保执行清理代码(是否发生异常无关)

  • 模块

    • 模块

      • 内涵

        一个.py文件构成一个模块

      • 包含

        • Python对象定义
        • Python语句
      • 目的

        从逻辑上组织代码

    • 引入模块

      • import module1,module2,…

        • 调用模块、对象
        • import a as b
          • 调用a模块
          • 模块a重命名为b
      • from module import name1,name2,…

        可直接使用导入的对象

      • from module_name import *

        • 可直接使用所有对象
        • 不提倡
      • 推荐导入顺序

        • 标准库模块
          • os(操作系统接口)
          • sys(与Python解释器相关的参数和函数)
          • math(数学函数)
          • datetime(日期和时间处理)
          • json(JSON数据编码和解码)
          • re(正则表达式操作)
        • 第三方模块
          • numpy(科学计算)
          • pandas(数据分析)
          • requests(HTTP请求)
          • flask(Web应用框架)
          • tensorflow(机器学习)
        • 自定义模块
    • 内置函数

      • globals()

        全局名称空间

      • locals()

        局部名称空间

      • reload()

        • 重新载入模块
        • reload(module_name)
      • dir()

        • 字符串列表
        • 一个模块里定义的所有模块、变量&函数
  • 面向对象编程

  • 函数

    • 概述

      • 内涵

        对程序逻辑进行结构化/过程化

      • 定义

        • def
        • return
          • 随时返回函数结果
          • 返回形式
            • 无返回值
              • 方法
                • 不用return
                • 仅return(不加返回值)
              • 返回对象类型
                • None
            • 一个值/对象
            • 总结
              • 返回对象数目 实际返回对象
              • 0 None
              • 1 object
              • > 1 tuple
          • 执行到return时,停止执行函数内余下的语句
        • 空函数(占位函数或无操作函数)
          • 不执行任何操作的函数
          • def empty_function(): pass
    • 装饰器

    • 参数

      • 处理参数传递的两种形式

        • 值传递

          • 参数

            基本数据类型

          • 内涵

            • 变量传递给函数后
              • 函数在内存中
                • 复制一个新变量
                • 不影响原有变量
            • 指向新的引用对象
        • 指针传递

          • 参数

            list

          • 内涵

            • 变量传递给函数的是指针
              • 指针指向序列在内存中的位置
              • 在函数中对list的操作
                • 在原有内存中进行
                • 从而影响原有变量
            • 原引用对象被改变
        • 可以先检查参数类型isinstance()