一、相关说明
- 以下知识思维导图下载路径https://gitee.com/zglao/InstallPackage/raw/master/Python.xmind
- 更新日期
2024
年9
月3
日11
点32
分(持续更新中)
二、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’
- a=’ABC’
- 本质上
- 变量用来指向数据对象
- 计算机内部把任何数据都看成一个对象
- 对变量赋值关联数据对象和变量
- 在计算机内存中的表示
常量
全部大写的变量名(本质上还是变量)
del语句
删除对象的一个引用
IO编程
- print()
- 打印到屏幕
- print(a,b)
- 依次打印
- 遇到,输出一个空格
- input()
- 读取键盘输入
- input()
- 可以接收Python表达式
- 返回运算结果
- print()
模块结构&布局
数据类型
类型
概念
指的是数据的分类,它定义了数据的存储方式、可以执行的操作以及数据的表现形式
作用
对数据的一种划分
标准类型
标准数据类型
- 数字
- 整型(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为特殊空值
- 不能理解为0
- 空值
序列
内涵
- 有序排列
- 包括
- str
- list
- tuple
操作符
标准类型操作符
(数据类型-标准类型-标准类型操作符)均适用
序列类型操作符
关系
in
not in
1
obj in seq # 输出: True/False
连接
- +(推荐使用seq1.extend(seq2))
- seq1 + seq2
- +(推荐使用seq1.extend(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号
- 之前–半角字符
- 之后–全角字符
- DBCS
计算机只能处理数字
- 文本→数字
- 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.upper()
- 宽度
- str.center(width)
- 居中
- str.ljust(width)/str.rjust(width)
- 左/右对齐
- str.zfill(width)
- 用0填充,字符串以正号或负号开始,考虑符号
- str.center(width)
- 编码
- 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()
- 序列中的元素连接成一个字符串
- str.expandtabs(tabsize=8)
格式化字符串
列表 | 元组
列表(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
- dict.get(key)
删除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
- 顺序查找,速度随元素增加变慢
- 占用内存少
- dict
注意
- key必须是可哈希的,不可变对象(均可哈希)
- 字符串、数值
- 元组(只能包括不可变类型)
- key必须是可哈希的,不可变对象(均可哈希)
集合(set)
- 无序的、不包含重复元素
- 分类
- 可变集合–set
- 不可变集合–frozenset
- 操作符
- 内置函数
- set vs tuple
条件 | 循环
条件
if语句
if 条件: …
1
2if 条件:
# 条件为真时执行的代码块if 条件: … else: …
1
2
3
4if 条件:
# 条件为真时执行的代码块
else:
# 条件为假时执行的代码块if 条件1: … 条件2: … else: …
1
2
3
4
5
6
7if 条件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.read(size)
输出
- file.write()/file.writelines()
- 字符串写入到文件中
- 字符串序列写入到文件中
- 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
- 访问未知的对象属性
- …
- NameError
- KeyboardInterrupt
- 所有的错误类型都继承自BaseException
- BaseException
- 错误
异常处理
try: … except exception1: … except exception2: … except: … else: … finally: …
1
2
3
4
5
6
7
8
9
10
11
12try:
...
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()