author:Nakiri
本文存在部分知识点的遗漏,以个人使用习惯进行整理,仅作期末复习使用!!
第一章 Python概述
- Python的特点
- 简洁。实现同样的功能时相对于其他语言的代码量最少。
- 语法优美
- 简单易学
- 开源
- 可移植性好
- 拓展性好
- 类库丰富
- 通用灵活
- 模式多样,既支持面向对象,又支持面向过程(语法层面)
- 良好的中文支持
- Python 2.x与Python 3.x兼容性不强
- 执行效率不高
- 导入与使用模块
- 可以使用
import 模块1, 模块2……
的方法进行导入,也可以使用from 模块名 import *
的方法导入模块的全部内容。由于第二种方法会降低代码的可维护性,建议使用第一种方法 - 调用模块中的内容,使用
模块名.函数
或模块名.变量
的方法
- 可以使用
- 模块、包、类库的一一
- 模块是最基础的代码组织方式,每个包含有组织的代码片段的.py文件都是一个模块,文件名就是模块名
- 包以类似目录的结构组织模块文件或子包,简单来说,一个包含_init_.py文件的目录就是一个包。
包中必须含有_init_.py文件
,并可以有多个模块和子包 - 库是一个抽象的概念,它是指具有相关功能的模块的集合
第二章 Python基础
-
注释
-
单行注释:
# 注释内容 # 若单行注释与代码共占一行,注释和代码之间至少有两个空格
-
多行注释
""" 主要用于说明函数或类的功能,也被称为说明文档 通过__doc__属性可以获得Python对象的说明文档以下代码举例打印print函数的说明文档 """ print(print.__doc__)
-
-
缩进
- 输入空格是Python 3首选的缩进方法。一般使用4个空格表示一级缩进。
- Python 3不允许混合使用Tab键和空格键
- 代码的缩进量不同会导致代码语义的改变,同一代码块的每行代码必须具有相同的缩进量,不允许出现无意义或不规范的缩进
-
语句换行
-
建议每行代码不超过79个字符
-
Python会将圆括号、中括号和大括号中的行进行隐式连接,实例如下
string = ("连接语句1" "连接语句2" "……" "连接语句n")
-
原本由圆括号、大括号或中括号包裹的语句在换行时不需要另行添加圆括号
-
-
标识符规则
-
由字母、数字、下划线组成,且不能以数字开头
-
标识符区分大小写。比如Nakiri和nakiri是两个不同的标识符
-
不允许使用关键字作为标识符
-
建议:
- 见名知意
- 命名规范:常量名使用大写的单个单词或下划线连接的多个大写单词。模块名、函数名使用小写的单个单词或由下划线连接的多个小写单词
-
-
关键字
[‘False’, ‘None’, ‘True’, ‘__peg_parser__’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
-
数据类型:
-
数字类型:整型(int)、浮点型(float)、复数类型(complex)、布尔类型(bool)
布尔类型是int类型的子类,只有True和False
-
字符串:可以由单引号、双引号、三引号包裹
'字符串1' "字符串2" '''字符串3'''
-
列表:多个元素的集合,可以保存任意数量、任意类型的元素,且可以被修改
['列表元素1','列表元素2','列表元素3']
-
元组:多个元素的结合,可以保存任意数量、任意类型的元素,但不可以被修改
('元组元素1','元组元素2','元组元素3')
-
集合:多个元素的集合,可以保存任意数量、任意类型的元素,但是集合中的元素无序且唯一
{'集合元素1','集合元素2','集合元素3'}
-
字典:是键值对,键不能重复
{"key1":"value1","key2":"value2","key3":"value3"}
-
-
输入输出函数
input(“输入提示语句”)
print(*objects, sep = ’ ', end = ‘\n’, file = sys.stdout)
- objects:表示输出对象,若有多个需要用逗号分隔
- sep:用于设定分隔符,默认空格
- end:设定输出结尾,默认换行
- file:数据输出的文件对象
-
整型:
-
4种计数方式
5 # 十进制 0b011 # 二进制,以0b或0B开头 0o5 # 八进制,以0o或0O开头 0x5 # 十六进制,以0x或0X开头 bin(x) # 将x转换为二进制数 oct(x) # 将x转换为八进制数 int(x) # 将x转换为10进制数 hex(x) # 将x转换为16进制数
-
-
python中表示无穷大是inf,无穷小是-inf
-
复数类型
- 由实部和虚部组成,一般表现形式为
实部 + 虚部
- 由实部和虚部组成,一般表现形式为
-
Python中常见的布尔值为false的数据:
- None
- False
- 任何数字类型的0
- 任何空序列
- 空字典
-
数字类型转换
int():将数字转换为整型
float():将数字转换为浮点型
complex():将数字转换为复数类型
-
运算符
- /:除,获取商
- //:整除,两个数相除,获得商的整数部分
- ** :取幂,比如a**b的意思是取a的b次幂
-
逻辑运算符
- and:双目运算符,与
- or:双目运算符,或
- not:单目运算符,非
-
Python中字符串的类型是str类型
第三章 流程控制
-
条件语句
-
if语句语法格式
if 判断条件: 代码段
-
if-else语句语法格式
if 判断条件: 代码段1 else: 代码段2
-
if-elif-else语句语法格式
if 判断条件1: 代码段1 elif 判断条件2: 代码段2 elif 判断条件3: 代码段3 else: 代码段4
-
if嵌套语法格式
if 判断条件1: 代码段1 if 判断条件2: 代码段2
-
-
循环语句
-
while语句语法格式
while 循环条件: 代码段
-
for语句语法格式
for 临时变量 in 目标对象: 代码段 """ for语句也可以和range()函数搭配,range函数可以生成一个由整数组成的可迭代对象,以下示例 """ for i in range(5): print(i) # 打印结果是0-4
-
-
跳转语句
- break语句
- continue语句
第四章 字符串
-
单引号和双引号用于定义单行字符串,三引号用于定义多行字符串
-
Python3种格式化字符串的方法
-
%格式化
-
常见的格式符
格式符 格式说明 %c 格式化为字符 %s 格式化为字符串 %d 格式化为整数 %u 格式化为无符号整型 %o 格式化为八进制数 %x 格式化为十六进制数 %f 格式化为浮点数,可以指定精度 -
使用%进行格式化的格式
format % values # format表示一个字符串 # values表示单个或多个真实数据
-
-
format()方法格式化
-
语法格式
str.format(values) # str为字符串,其中包含单个或多个为真实数据占位的符号{} # values是单个或多个待替换的真实数据 # 以下为示例 use = "{}天下第一可爱!" print(use.format("步束")) """ 大括号中可以填索引值,当有多个真实值时会按照索引来进行替换 也可以填替换值名称,当在方法中填入真实值时,只需要按照 替换值名称=真实值名称 来填写就可以 """ use1 = "世间{food}、{book}、{girl}不可辜负!" print(use1.format(food="美食",book="好书",girl="美少女"))
-
-
使用f-string格式化
-
格式
f('{变量名}') 或者 F('{变量名}') # 示例 use = "步束" print(f'{use}天下第一!')
-
-
-
字符串的常见操作
-
查找find()函数
str.find(sub,start,end) # sub:要查找的子串 # start:开始索引,默认为0,可以不写 # end:结束索引,默认为字符串长度,可以不写
-
替换replace()函数
str.replace(old,new,count) # old:要被替换的旧子串 # new:新子串 # count:替换旧子串的次数,默认全部替换,可以不写
-
分割split()函数
str.split(sep=None, maxsplit=-1) # sep:分隔符,默认是空格 # maxsplit:分割次数,默认是-1,表示不限制次数分割,可以省略。
-
拼接join()函数
str,join(interable) # interrable:表示连接字符串的字符 symbol = '*' world = 'Python' print(symbol.join(world)) # 打印结果:P*y*t*h*o*n
-
删除函数
# 移除字符串头部和尾部的指定字符 str.strip(指定字符) # 移除字符串头部的指定字符 str,lstrip(指定字符) # 移除字符串尾部的指定字符 str.rstrip(指定字符) # 不指定指定字符,默认是空格
-
大小写转换函数
# 小写全部转换为大写 str.upper() # 大写全部转换为小写 str.lower() # 第一个字母转换为大写形式 str.capitalize() # 每个单词的首字母转换为大写 str.title()
-
字符串对齐
# 返回长度为width的字符串,原字符居中显示 str.center(width,fillchar) # fillchar:参数width指定的长度大于原字符串长度大于原字符串长度时填充的字符,默认空格 # 原字符左对齐显示 str.ljust(width,fillchar) # 原字符右对齐显示 str.rjust(width,fillchar)
-
第五章 组合数据类型
-
根据组合数据类型可以分为3类:序列类型、集合类型和映射类型
-
序列类型
- 支持双向索引:正向递增索引和反向递减索引
- 主要有3种:字符串(str)、列表(list)、元组(tuple)
-
集合类型
- 特征
- 确定性:集合中每个元素都是确定的
- 互异性:集合中每个元素都是不一样的
- 无序性:集合中的元素没有顺序
- 要求放入集合的必须是不可变类型的
- 整型、浮点型、字符串类型和元组属于不可变类型
- 列表、字典和集合是可变类型
- 特征
-
映射类型
唯一符合的是字典(dict)
-
列表
-
创建
- 使用[]创建
- 使用list()函数创建列表
-
列表中的元素可以是整型、浮点型、字符串等基本类型,也可以是列表、元组、字典等组合类型,还可以是其他自定义类型,元素使用逗号分隔
-
isinstance()函数可以判断对象是否为可迭代对象
-
访问列表元素
-
以索引方式访问列表元素
list[n]
-
以切片方式访问列表元素
list[m:n:step] # 获得按步长step获取列表list中m~n对应的元素(不包括list[n]),step默认是1,mn可以省略
-
在循环中访问列表元素
use = ['n','a','k','i','r','i'] for li in use: print(li,end = ' ') # 利用in 和 not in可以判断元素是否存在于列表
-
-
添加列表元素
-
append()方法
list.append(n) # 在列表末尾添加新的元素
-
extend()方法
list1.extend(list2) # 在列表末尾一次性添加另一个列表中的所有元素
-
insert()方法
list.insert(索引位置,新元素) # 按照索引将新元素插入列表的指定位置
-
-
元素排列
-
sort()方法
list.sort(key = None, reverse = False) # key:指定排序规则 # reverse:False表示升序排序,True表示降序排列
-
sorted()方法
sorted(list) # 按升序排列列表元素,该方法的返回值是升序排列后的新列表,排列操作不会对原列表产生影响
-
reverse()方法
list.reverse() # 用于逆置列表
-
-
删除列表元素
-
del语句
use = ['n','a','k','i','r','i'] del use[0] # 删除索引为0的元素 del use # 删除整个列表
-
remove()方法
list.remove(需要匹配的元素)
-
pop()方法
list.pop(n) # 移除列表中索引为n的元素,n默认为列表中最后一个元素的索引
-
clear()方法
list.clear() # 清除列表中的元素
-
-
列表推导式
[exp for x in list] # exp:用于在每层循环中对列表中的元素进行运算 list = [1,2,3,4,5,6,7] list = [data*data for data in list] # 带有if的列表推导式 list = [data for data in list if data > 4] # 嵌套for循环语句的列表推导式 l1 = [1,2,3] l2 = [4,5,6] l3 = [x + y for x in l1 for y in l2] # l3:[5, 6, 7, 6, 7, 8, 7, 8, 9]
-
-
元组
- 元组的表现形式是包含在一对圆括号中
- 内置的tuple()可以创建一个空元组
- 若元组中只有一个元素,它后面的逗号不能省略
- 与列表相同,支持以索引、切片和循环的方式访问元组
- 元组是不可变类型,其中元素不能修改,不支持添加元素、删除元素和排序操作
-
集合(set)
-
由大括号包裹,逗号分隔元素
-
集合中的元素无序但必须唯一
-
常见操作:
常见方法 说明 add(x) 向集合中添加元素x,x若存在则不做处理 remove(x) 删除集合中元素x,若x不存在抛出异常KeyError discard(x) 删除集合中元素x,若x不存在不做处理 pop() 随机返回集合中一个元素,同时删除该元素。若集合为空,抛出KeyError clear() 清空集合 copy() 复制集合 isdisjoint(T) 判断集合与集合T是否没有相同的元素,没有返回True,有返回False -
集合推导式
{exp for x in set if cond}
-
-
字典
-
语法格式
{key1:value1,key2:value2,key3,value3}
-
字典访问
字典变量[键] 字典变量.get(key) dic.keys() # 获取所有键 dic.values() # 获取所有值 dic.items() # 获取所有元素
-
添加元素
# 当字典中不存在某个键时 字典变量[键] = 值 #使用upload()也可以实现以上代码 dic.update(key = value)
-
修改元素
字典变量[键] = 值 dic.update(key = value)
-
删除元素
# pop()方法删除字典中的指定元素,若删除成功,该方法返回目标元素的值 dic.pop(key) # popitem()随机删除字典中的元素,返回被删除的元素 dic.popitem() # clear()方法清空字典中的元素 dic.clear()
-
字典推导式
{new_key:new_value for key,value in dic.items()} # 可以快速交换字典中的键和值 dic = {'name':'nakiri','age':'20'} dic = {value:key for key,value in dic.items()}
-
-
运算符
- *运算符:字符串、列表、元组可以与整数进行乘法运算,运算后产生的结果为原数据的整数倍的拼接
第六章 函数
-
定义函数
def 函数名 ([参数列表]): ['''文档字符串'''] 函数体 [return语句]
-
参数的打包
-
可以再形参前面添加“*”或“**”:
- 如果是“*”,那么它可以接收以元组形式打包的多个值
- 如果是“**”,那么它可以接收以字典形式打包的多个值
def test(*args): print(args) test(1,2,3,4,5) def test2(**args): print(args) test2(name='nakiri',age=20)
-
-
参数的解包
use = (1, 2, 3, 4, 5) def test(a, b, c, d, e): print(a, b, c, d, e) test(*use) # 打印结果:1 2 3 4 5
-
LEGB原则:
- L:局部作用域
- E:嵌套作用域
- G:全局作用域
- B:内置作用域
- 搜索变量是按照LEGB顺序依次搜索变量
-
global关键字:可以将局部变量声明为全局变量
global 变量
-
nonlocal关键字:在局部作用域中修改嵌套作用域中声明的变量
-
匿名函数
-
匿名函数无需定义标识符
-
语法:
lambda <形式参数列表> : <表达式> # 定义一个匿名函数,并将它返回的函数对象赋值给变量temp temp = lambda x : pow(x, 2) print(temp(10)) # 打印结果:100
-
第七章 文件与数据格式化
-
文件的打开与关闭
-
打开文件可以通过内置的open()打开:
open(file, model = 'r', encoding = None) # model:r表示以只读打开,w表示以只写打开,a表示以追加模式打开 # encoding:设置编码格式
-
关闭文件
# 可以通过内置的close()关闭文件 file.close # 也可以通过with语句 with open('a.text') as f: pass # 一些操作 # a.text文件使用完成后,会自动关闭文件
-
-
文件的读写
-
读取文件
read(n=-1) # 从指定文件中读取指定字节的数据,若n为-1,表示一次返回文件中所有的数据 readline() # 从指定文件中读取一行数据 readlines(hint-1) # 可以一次性读取文件中所有数据,若读取成功返回一个列表,文件中每一行对应着列表中的一个元素 # hint单位为字节,用于控制要读取的行数
-
写文件
write(data) # 可以将指定字符串写入文件 writelines(lines) # 将列表写入文件
-
-
文件的定位读写
-
tell()获取文件当前的读写位置
-
seek()控制文件的读写位置,实现文件的随机读写
seek(offset, from) # offset:偏移量,即需要移动的字节数 # from:0表示文件开头,1表示当前读写位置,2表示文件末尾
-
-
文件与目录管理
-
删除文件:remove()
import os os.remove('a.text')
-
重命名:rename()
import os os.rename('a.text','b.text')
-
创建、删除目录:mkdir(), rmdir()
import os os.mkdir('dir') os.rmdir('dir')
-
获取当前目录: getcwd()
-
更改默认目录:chdir()
-
获取文件名列表:listdir()
-
-
基于维度的数据分类:
一维数据(CSV格式)、二维数据(矩阵、二维数组)、三维数据(JSON格式)
第八章 面向对象
-
类的定义
class 类名: 属性名 = 属性值 def 方法名(self): 方法体
-
对象的创建和使用
对象名 = 类名()
-
类属性:声明在类内部,方法外部的属性
-
实例属性:是方法内部声明的属性
- 访问实例属性:只能通过对象访问
- 修改实例属性:通过对象进行修改
- 动态添加实例属性:支持在类的外部使用对象动态的添加实例属性
-
实例方法
- 形似函数,但它定义在类内部,以self为第一个形参,代表对象本身,会在实例方法被调用时自动接收由系统传递的该方法的对象
- 只能通过对象调用
-
类方法
-
定义在类内部,使用装饰器@classmethod修饰的方法
@classmethod def 类方法名(cls): 方法体
-
可以通过类和对象调用
-
-
静态方法
-
定义在类内部,使用装饰器@staticmethod修饰的方法
@staticmethod def 静态方法名(): 方法体
-
静态方法没有任何默认参数,它适用于与类无关的操作,或者无需使用类成员的操作
-
静态方法内部不能直接访问属性或方法,但可以使用类名访问类属性或调用类方法
-
-
私有成员:在类成员的名称前面添加双下划线(__)的方式表示私有成员
__方法名 __属性名
-
构造方法:__init__()方法,有有参无参两种形式
-
析构方法:__del__()方法,销毁对象时调用的方法
-
封装
- 基本思想:对外隐藏类的细节,提供用于访问类成员的公开接口
- 2点要求:
- 将属性声明为私有属性
- 添加2个供外界调用的公有方法,分别用于设置或获取私有属性的值
-
继承
-
单继承
class 子类名(父类名):
-
多继承
class 子类名(父类名1, 父类名2, ...):
-
子类不会继承父类的私有成员
-
-
重写:只要在子类中定义与父类方法名同名的方法,然后在方法中按照子类需求重新编写功能代码即可
-
多态:让不同类的同一功能可以通过一个接口调用,并表现出不同的行为
-
运算符重载
第九章 异常
-
NameError:未定义变量引发的异常
-
IndexError:访问越界
-
AttributeError:使用对象访问不存在的属性
-
FileNotFondError:未找到文件或指定目录
-
异常捕获:try-except语句、try-except-else语句、try-except-finally语句
-
抛出异常
raise 异常类 # 使用异常类引发异常 raise 异常类对象 # 使用异常类对象引发异常 raise # 使用刚出现的异常重新引发异常
-
assert语句抛出异常
assert 表达式[,异常信息] assert num != 0,'除数不能为空!' # 如果触发了异常,则是AssertionError异常
-
异常传递:如果程序中的异常没有被处理,默认情况下会将该异常传递到上一级,如果上一级仍旧没有处理,会继续向上传递,直到被处理或程序崩溃为止
-
自定义异常:需要继承Exception或Exception子类的类