导图社区 Python基础知识
这是一篇关于Python基本语法整理的思维导图,主要内容有流程控制、函数、类和对象、文件操作、模块和包、异常处理。
编辑于2022-12-25 19:11:13 江苏省Python基础知识
流程控制
判断语句
if elif else语句
if 表达式1: 表达式1为真执行语句 elif 表达式2: 表达式2为真执行语句 else: 所有表达式都为假执行语句
表达式结果为bool类型
elif可以有任意个,else只能有0或1个
条件判断是互斥且有序的,上一个满足后就不会再判断了
嵌套流程控制块时注意层级缩进
变量= 变量1 if 表达式 else 变量2
表达式为真则变量1赋给变量,否则变量2赋给变量
可以多层嵌套
循环语句
while循环
while 循环条件: 执行语句
循环条件是自定义的bool类型,值为真时运行执行语句
需注意循环终止条件,不要出现死循环
嵌套流程控制块时注意层级缩进
for循环
for 循环变量 in 遍历对象: 执行语句
循环是一种轮询机制(遍历) 将遍历对象元素依次赋给循环变量并执行语句
无循环条件 循环次数取决于遍历对象元素个数
遍历对象可以是容器 文件 range()函数
嵌套流程控制块时注意层级缩进
range()函数生成简单序列
range(num2)
获取从0到num2的数字序列,不含num2,步长为1
range(num1,num2)
获取从num1到num2的数字序列,不含num2,步长为1
range(num1,num2,step)
获取从num1到num2的数字序列,不含num2,步长为step
循环中断
break
立即退出本层循环
continue
立即结束本层本次循环,进入下一次循环
函数
定义
def 函数名([形参1,形参2....]): [""" 函数说明 """] 函数体 [return 返回值1,返回值2]
返回值
可以有多个返回值,类型可以不同
调用时可以用多个变量依次接收返回值
无返回值时或return None解释器为函数返回None
return 以后行的语句不会执行
函数说明
可以采用多行注释,对函数进行说明
写在函数体之前
调用时鼠标悬停会显示说明文档
变量作用域
内部定义的变量为局部变量,调用完成时销毁
与全局变量同名名时局部优先
使用global关键字将函数体内的变量声明为全局变量
参数传递
形参
形参可以是任意数据类型或函数
形参是列表时,函数体中对列表的任何修改均会改变实参列表
可以采用切片列表[:]创建列表副本,避免实参列表被修改
Python是传值机制
对形参的操作不会改变实参
位置参数
函数调用时根据定义的形参顺序接收实参
关键字参数
调用函数时通过"形参key=实参value"的形式传递参数
可不按形参列表顺序传递
和位置参数混用时位置参数在前,关键字参数在后
缺省参数(具有默认值)
函数调用时若传递了实参则用实参,没有则用默认值
定义和调用时所有位置参数必须在默认参数前
可变个数参数
位置传递
def function(*args): .......
调用时传递的所有实参被按顺序合并进元组args
关键字传递
def function(**kwargs): ...........
调用时实参按"key=value"形式存至字典kwargs
函数作为参数
传递的是计算逻辑
lambda函数
定义
lambda 传入参数: 函数体(仅一行)
lambda是关键字,定义匿名函数,只能临时使用一次
def关键字定义有名称的函数,可重复调用
类和对象
class 类名: 类的属性,类中定义的变量(成员变量) 类的行为,类中定义的函数(成员方法)
对象
构建对象
对象名= 类名(传给构造方法形参的实参)
对象调用类的成员
对象名.变量名
对象名.方法名(实参)
方法
定义在类(class)中的函数称为方法
def 方法名(self,形参....): 方法体
第一个形参必须为self,调用时将其忽略
类内的方法访问类的成员self.成员名
内置魔术方法
以双下划线开始并以双下划线结束的方法
构造方法
def __init__(self,形参...): 方法体
构建对象时自动调用,缺省方法体为空
采用构建对象时传递的实参为形参赋值
字符串方法
def __str__(self,形参...): return str
控制类的对象转换为字符串的结果,返回值为字符串
缺省返回对象的内存地址
比较方法
小于大于比较
def __lt__(self,形参...): return bool表达式
控制类构建的不同对象之间的比较,返回bool值
缺省则比较对象时报错
小于等于比较
def __le__(self,形参...): return bool表达式
控制类构建的不同对象之间的比较,返回bool值
缺省则比较对象时报错
相等比较
def __eq__(self,形参...): return bool表达式
控制类构建的不同对象之间的比较,返回bool值
缺省(默认)则比较对象的内存地址
封装
将事物的属性和行为封装到类中,描述为成员变量和成员方法的过程,默认成员为公有
私有成员
以双下划线(__)开始的成员变量名或成员方法名
构建的对象无法调用,只供类内的方法调用
继承
定义
class 子类名(父类1[,父类2...]): 子类成员
对象调用类内同名成员时继承顺序靠前优先
复写
在子类中重新定义同名的属性或方法即可
直接调用时子类优先
子类中调用父类成员
父类名.成员变量
super().成员变量
父类名.成员方法(self)
super().成员方法()
抽象类
特性
含有抽象方法(方法体为pass)的类
类似于定义了一个标准,要求(软要求)子类实现
用于构建子类
多态
传给同一方法的实参对象不同时得到不同的执行结果
文件操作
操作系统以文件为单位管理
文件编码
文件内容和二进制之间的翻译规则
编码类型
TUF-8
目前全球通用编码格式
GBK
Big5
等
文件打开
使用open()函数打开文件
f=open(filename, mode, encoding="UTF-8")
f:是文件对象,拥有特殊的属性和方法
filename: 目标文件名字符串,可包含文件路径
mode: 文件访问模式
只读'r'
默认模式,文件的指针在文件开头
文件不存在则会报错
写入'w'
打开文件,并从头开始写入,原有内容被清空
文件不存在则创建新文件
追加'a'
新的内容被写入已有内容之后
文件不存在则创建新文件
encoding: 编码格式,推荐用UTF-8,不能用位置参数,需用关键字参数指定
文件读取
文件对象.read([num])
num表示从文件中读取的数据长度(单位:字节),缺省表示读取文件所有数据,返回字符串
文件对象.readline()
一次读取一行内容,返回字符串
文件对象.readlines()
按行读取文件所有内容封装至列表内,文件每行内容字符串为一个元素
for循环
for line in open(filename, mode, encoding="UTF-8"): ........
每次循环读取一行内容
文件写入
文件对象.write(content)
将内容content写入文件在内存的缓冲区
调用flush()或close()方法后才会被存入硬盘
文件对象.flush()
缓冲区的文件内容存入硬盘
关闭文件
文件对象.close()
with open语法
with open(filename, mode, encoding="UTF-8") as f: ......
文件操作完成后自动关闭文件
模块和包
模块
定义
本质是一个Python文件(.py),模块内可定义函数,类和变量等
一个模块就是一个工具包,可通过import导入直接使用
模块导入
[from 模块名/包名] import [模块|类|变量|函数|*] [as 别名]
常用组合形式
import 模块名
导入模块所有内容
模块名.功能名(参数)
from 模块名 import 类|变量|方法名列表等
导入模块中的特定功能
功能名(参数)
from 模块名 import *
导入模块所有功能
调用时不用加模块名
import 模块名 as 别名
as为模块加别名
别名.功能名(参数)
from 模块名 import 功能名 as 别名
为功能加别名
别名(参数)
多次导入造成的冲突以最后一次导入的为准
模块内置变量
内置变量__main__
模块导入时会自动运行模块中的执行语句
模块内运行时设为__main__
模块调用时不为__main__
通过if语句设置代码块在模块导入时不运行
if __name__ == '__main__': ......
内置变量__all__
如果定义了该变量,import *仅导入__all__变量内容
如果没定义该变量,import *导入所有内容
__all__控制*导入的内容
包
定义
包含模块和一个__init__.py文件的文件夹,创建时自动添加
__init__.py文件可以为空,但必须存在
包导入
可直接导入包(不推荐)
可用包名.模块名即可替换模块名
__all__变量在__init__.py文件内
其他同模块导入
第三方包安装
在命令提示符中输入pip install 包名或pip install -i 网址 包名
在PyCharm中设置-Python Interpreter中安装,options中可填-i 网址
国内包网址为https://pypi.tuna.tsinghua.edu.cn/simple
异常处理
异常捕获
try : 可能发生错误的代码块 except [(ErrorName1, ErrorName2......) as 别名]: 出现异常后的处理方法 [else: 无异常执行代码块] [finally: 无论有无异常执行代码块]
捕获指定的异常ErrorName1或ErrorName2...赋给别名对象
(ErrorName1, ErrorName2......)为异常的元组类型
[]内缺省则捕获所有异常
异常元组为对象Exception时为捕获所有异常,Exception包含所有异常
没有异常是执行else块,可以缺省
无论有无异常finally块均会执行,可以缺省
异常传递
函数调用时,异常会逐级向上传递至最高调用层级
当所有层级都没有异常捕获时,会报错
基本模块
json模块
json数据格式
是一种数据交互格式,内容为特定格式的字符串
在各编程语言中流通的数据格式
是一个字典或元素为字典的列表
import json
json.dumps(data[,ensure_ascii=False])
返回将Python数据转换的json数据(字符串)
可选项指定是否将中文等转化为ascii码,缺省为True
json.loads(data)
返回将json数据转换为Python数据(列表/字典)
datetime模块
datetime.datetime.now()
返回包含年、月、日、小时、分钟、秒和微秒的日期对象
pyecharts包
百度开源的数据可视化效果模块
图表效果浏览
方法
add()
用于添加图表的数据和设置各种配置项
print_echarts_options()
打印输出图表的所有配置项
render()
默认将会在根目录下生成一个 render.html 的文件,支持 path 参数
数据类型
type(数据/变量名)返回数据/变量的数据类型
基本数据类型
数字num
整数int
浮点数float
默认6位小数
复数complex
虚数单位以 j 表示
布尔bool
假为False 本质为0;真为True本质为1
除数值0、None、False、假、空格符、空容器为为False外均为True
字符串str
定义
单引号对'...'
双引号对"..."
交替使用可以输入包含引号的字符串
三个单引号对'''...\n...'''或双引号对"""...\n..."""
支持字符串内换行
拼接
简单拼接
使用+拼接多个字符串
不能用来连接数字类型
格式化拼接
f"输出内容{数据}...{数据}"
f表示字符串中有占位符,数字原样输出,不做精度控制
"输出内容占位符..." %数据
占位符
%s
字符串
%d
有符号十进制整数
%f
浮点数
%c
字符
%u
无符号十进制整数
%o
八进制整数
%x
十六进制整数(字母小写)
%e
索引符号(小写e)
%E
索引符号(大写E)
%g
%f和%e的简写
%G
%f和%E的简写
可以有多个占位符,相应的数据以元组形式给出,数据类型与占位符不一致时会以占位符类型为准先执行数据类型转换再做字符串拼接
数字精度控制
%md
m控制数字总宽度,若小于数字位数则m无效,大于则在数字前补空格
%m.nf
n控制小数位数,会进行四舍五入,小数点占一位,省略m表示不限制宽度
转义字符\
'\n'
'\t'
横向制表符
'\\'
输出'\'
字符串界定符前加r或R,转义字符失效,字符串原样输出
基本数据类型转换
显示转换
int(x)
将x转换为整型并返回,x为float类型时会丢失小数
float(x)
将x转换的浮点数并返回
str(x)
将x转换为字符串并返回
任意数据类型都可以原样转换为字符串
bool(x)
x为数值0、None、False、假、空格符、空容器返回False,其他均返回True
chr(x)
将整数x按ASCII码转换为字符串
ord(x)
将字符串x转换为整型数
hex(x)
将整数x转换为十六进制的字符串
oct(x)
将整数x转换为八进制的字符串
bin(x)
将整数x转换为二进制的字符串
隐式转换
算术运算可以将int型隐式转换为float型
高级数据类型(数据结构)
数据容器
序列
序列特性
元素有序,可用下标索引和切片操作
索引或切片的操作符均为[]
支持while和for循环遍历序列
元素下标
第一个元素正向递增下标为0,依次往后加1
最后一个元素反向递减下标为-1,依次往前减1
下标超界会报错
序列索引和切片
索引
序列名[下标]
切片
从序列中取出一个子序列并返回一个新序列
序列名[strat:end[:step]]
依次取出下标从start至end(不包括end)的元素,步长为step
省略start指从头开始,省略end指到序列末尾,省略step为则1
step为负则反向取元素,注意start和end调换位置
序列名[::-1]反转序列
变量名=序列名[:]复制序列
字符串str
特性
元素均为字符,定义后不可修改
元素有序可重复,无分隔符
方法
str.title()
字符串str中的每个单次首字母大写
str.upper()/str.lower()
字符串str全部大写/小写
str.index(string)
查找字符串string在字符串str中的起始下标并返回
str.split(str1)
使用字符串str1将字符串str分割,返回一个列表,元素为字符串
str.strip(str1)
去除字符串str最前后的指定字符串str1中的元素
省略字符串str1则去除字符串str最前后的空格符和换行符
返回一个新字符串对象
str.lstrip()/str.rstrip()
删除字符串str左/右的空白字符
str.count(str1)
统计指定字符串str1在字符串str中的个数并返回int型数据
列表list
定义
[元素1, 元素2.....]
列表名 = [元素1,元素2....]
列表名 = [] # 空列表 列表名 = list() # 空列表
特性
元素有序可重复,之间用,分隔
元素类型可以不同,可以为任意数据类型
元素允许修改
多层列表则需多层索引
方法
查询元素下标
列表名.index(元素)
查询元素的下标正向索引并返回int型数据
元素不在列表中则报错,返回ValueError
修改元素
列表名[下标]=元素
插入元素
列表名.insert(下标, 元素)
在指定位置插入指定元素
追加元素
列表名.append(元素)
在列表尾部追加指定值的元素
列表名.extend(其他数据容器名)
依次追加其他数据容器的元素至列表尾部
删除元素
del 列表名[下标]
列表名.pop(下标)
取出下标对应元素并返回
列表名.remove(元素)
移除指定值在列表中的第一个匹配项
清空列表
列表名.clear()
统计某元素个数
列表名.count(元素)
统计指定元素在列表中的个数并返回int型数据
元组tuple
定义
(元素1, 元素2.....)
元组名 = (元素1,元素2....)
元组名 = () # 空元组 元组名 = tuple() # 空元组
特性
与列表的唯一区别是定义完成后不可修改
定义一个元素的元组时元素后必须加,
某元素为其他可修改数据容器时,可修改次级容器的元素
方法
元组名.index(元素)
查找元素下标并返回
元组名.count(元素)
统计元素在元组中出现次数并返回
集合set
定义
{元素1,元素2.....}
集合名 = {元素1,元素2....}
集合名 = set() # 空集合
特性
元素用,分隔,不可重复,可修改
元素无序无下标,不支持索引和切片
只能用for循环遍历
方法
setname.add(element)
在集合中添加指定元素
setname.remove(element)
在集合中移除元素
setname.pop()
随机取出一个元素并返回
setname.clear()
清空集合
set1.difference(set2)
求set1和set2的差集并返回一个新集合,set1和set2保持不变
set1.difference_update(set2)
从set1中移除与set2相同的元素,set1被修改,set2保持不变
set1.union(set2)
将set1和set2组合成新集合并返回,set1和set2保持不变
字典dict
定义
{key1:value1, key2:value2......}
字典名 = {key1:value1, key2:value2......}
字典名 = {} # 空字典 字典名 = dict() # 空字典
特性
存储的元素为键值对,元素间用,分隔,键和值通过:联系
字典的key不可以重复,重复了视为更新key对应的value
元素无序,不能用下标索引,只能通过下标key索引对应的value
dictname[key]
key可以是除dict外的任意数据类型,value可以为任意数据类型
只能用for循环遍历
for key in dict.keys()/dict: .......
依次将dict中的key赋给临时变量
for key, value in dict.items(): .......
依次将dict中的key value赋给两个临时变量
方法
dict[key] = value
新增/更新key的value
dict.pop[key]
返回dict中key的value,并在dict中删除该键值对
dict.clear()
清空字典
dict.keys()
返回字典中的所有key组成的列表,元素类型与key对应
dict.values()
返回字典中的所有value组成的列表,元素类型与value对应
数据容器总结
通用操作
len(容器名)
统计容器元素个数并返回int型数字
max(容器名)
min(容器名)
求出容器中的最大/最小元素
字典比较的是key值
容器为str从前向后依次比较字符的ASCII码
sorted(容器名[, reverse=True])
按元素/key的大小进行正向(反向)排序
返回值为列表对象
容器之间的转换
str(容器名)
容器原样转换为字符串
list/tuple(容器名)
str类型的每个字符转为一个元素
dict类型中的每个key转为一个元素,丢失value
set(容器名)
原容器元素去重转换,顺序随机
dict类型中的每个key转为一个元素,顺序随机,丢失value
运算符
类型
算术运算符
加+ 减- 乘* 除以/ 整除// 取余% 乘方**
赋值(复合赋值)运算符
= += -= *= /= //= %= **=
支持链式赋值
支持系列解包赋值
比较运算符
> < == != >= <=
结果为bool类型值 真返回True 假返回False
逻辑运算符
与and
从左到右结合
或or
从左到右结合
非not
从右到左结合
结果为bool类型
位运算符
用数字的二进制码进行计算
位与&
同1为1,其他为0
位或|
同0为0,其他为1
位异或^
相同为0不同为1
位取反~
1改为0,0改为1
从右到左结合
左移位<<
将二进制数向左(高位)移指定位数N, 高位溢出位被丢弃,右(低位)空位补0
等于左边数乘以2的N次幂
右移位>>
将二进制数向右移指定位数N, 低位溢出位被丢弃,高位空位用左边数的最高位数字补全
等于左边数除以2的N次幂
身份运算符
is
两个变量是同一个变量返回True,否则返回False
is not
两个变量不是同一个变量返回True,否则返回False
成员运算符
in
对象元素中存在指定值返回True,否则返回False
not in
对象元素中不存在指定值返回True,否则返回False
优先级
从上到下优先级逐级降低,同优先级从左到右计算
括号()的优先级最高
基础语法和规范
缩进
Python使用缩进分割代码块(类定义,函数定义,流程控制模块等)
缩进表示代码块的开始,非缩进表示代码块结束,每一级缩进使用4个空格
必须在同一代码层级中使用相同数量的空格,否则会报错
注释
单行注释: # 右边的说明文字
一对三单引号('''注释内容''')或一对三双引号("""注释内容""")
可以多行
特殊注释
# -*- coding: utf-8 -*- 指定编码格式(Python3已默认)
#!/usr/bin/env python3 定义#! 指定Linux路径下的python解释器
机器标识使用单引号'···',如dict中key,自然语言使用双引号"···"
pass语句
只起占位符作用,使语法结构完整
一般用在流程控制块,函数定义,类定义中
输入输出函数
输入
input("输入提示信息")
返回输入的字符串,如需得到数字需要用类型转换
输出
print(self, *args, sep=' ', end='\n', file=None)
输出语句默认自带换行符end='\n',可通过参数传递修改
同一输出语句内用,分隔的各参数输出后默认以空格符sep=' '分隔,可通过参数传递修改
标识符
命名规则
只能包括字母/数字/下划线_/中文(不推荐),不能以数字开头
大小写敏感
不可使用关键字
变量特性
不需要声明,赋值时自动指定数据类型
可以在设置后更改其类型
局部变量和全局变量,以层级区分
一切变量皆对象
命名规范
基本原则
命名简明知意,尽量使用全拼,含长单词的对长单词缩写
变量名
可以使用小驼峰或大驼峰或下划线命名法
常量名
全部大写
类名符合大驼峰命名法,各单词首字母大写
文件名、包名、模块名全小写,不使用下划线
函数和方法名为全小写,可使用下划线,实例方法以self开头,类方法以cls开头
类型注解
特性
Python 3.5引入的类型注解,方便静态类型检查工具提供数据类型说明
帮助IDE进行类型推断,做代码提示
容器变量注解中的[...]可以省略
赋的值与注解的类型不一致时不会报错,变量以赋值的类型为准
类型包括基本和高级数据类型和类名和Union类型
在注释中进行类型注解
# type: 类型
语法
变量
变量名: 类型 = 值
容器
列表名: list[类型] = [元素...]
元组名:tuple[元素1的类型, 元素2的类型....] = (元素...)
集合名: set[类型] = {元素...}
字典名: dict[key类型,value类型] = {元素......}
函数(方法)
返回值类型注解
def 函数名(形参名: 类型, ........) -> 返回值类型: 函数体
形参类型注解
def 函数名(形参名: 类型, ........): 函数体
对象
对象名: 类名 = 类名()
Union类型
Union[类型, .....]
认识Python
特点
优点
简单,易学,开发效率高
代码开源免费
可移植到不同的操作系统
支持面向过程和面向对象
丰富的第三方库
Web开发Django、Flask
爬虫Scrapy
科学计算Numpy、Pandas
缺点
运行速度慢
Python是解释型语言,代码执行时会按行翻译为机器码
语法缩进严格
源代码无法加密
应用方向
Web开发
爬虫开发
数据分析
机器学习
人工智能
运维开发
Python安装
官方解释器
开发文档
PyCharm
使用教程
基本设置