导图社区 Python从入门到框架10天
Python入门,复习,面试面试,新手、老手均实用。如 将计算机中存放数据的内容分配一个空间,这个空间的名称叫变量。
编辑于2023-08-21 11:35:45 浙江省Python从入门到框架10天
day1
Python基础语法
注释
作用
增强代码的可读性,通过自己熟悉的语言进行描述
一般在编写复杂代码时先写注释再写代码
单行注释
单行注释的快捷键 ctrl+/
多行注释
多行注释也叫块注释 , 或者叫文档注释
格式
"""多行注释的内容"""
'''多行注释内容'''
变量
定义
将计算机中存放数据的内容分配一个空间,这个空间的名称叫变量
作用
存储数据
调用数据
规则
数字 字母 下划线
不能以数字开头
字母需要区分大小
不能使用python内置的关键字
不能使用中文
命名要求
驼峰命名法
蛇形命名法
Python内置关键字查看
dos窗口
import keyword
keyword. kwlist
Python数据类型
常见数据类型
数字类型
int
float
bool
非数字类型
字符串
列表
元组
字典
查看数据类型
type(数据)
类型的转换
注意事项
int(x), x是字符串时,必须是整数类型的字符串
float(x), x是字符串时,必须是浮点数类型的字符串
str(x), 对于任意数据类型x都可以转为字符串类型
格式化输出
格式化函数输出
print("{}".format(变量名))
f-格式化输出
格式: print(f"{变量名}")
day2
程序输入输出
定义
将原有字符本来的意义转换为另一层意思
常见转义字符
\n : 换行(相当于回车键)
\t : 缩进一个tab键(相当于4个空格)
\\ : 输出\本身
\' : 输出单引号
运算符
算术运算符
** : 求幂
* : 乘
/ : 除
// : 求商
% : 求余
+ : 加
- :减
比较运算符
逻辑运算符
赋值运算符
运算符的优先级
单运算符的优先级
算数运算符 : ( ) ** * / + -
逻辑运算符 : ( ) not and or
多运算符的优先级(由高到低次序)
算数运算符
比较运算符
赋值运算符
逻辑运算符
循环结构
while循环
for循环
if判断
day3
rang函数
范围函数,将指定区间的数据从该范围中取出 ,python自带的内置函数
规则
左闭右开
for循环
场景
对于有容器类的操作, 遍历取/存数据时常常使用
数据序列
可变数据类型
变量对应数据值在内存中可以直接修改
包括
list
dict
不可变数据类型
变量对应数据值在内存中不可以直接修改
包括
int
float
bool
tuple
str
字符串
格式
方式一
变量名 = " "
变量名 = ' '
变量名 = """ """
变量名 = ''' '''
方式二
通过python自带的函数定义字符串
变量名 = str()
相当于 变量名 = ' '
基本使用
下标取元素
语法格式: 字符串[下标值]
统计
语法格式: 字符串.count(被统计的元素)
长度
语法格式: len(字符串)
字符串切片
语法格式 : 字符串[起始位置:结束位置:步长]
字符串的查找
语法格式 : 字符串.find(被查找元素,起始位置,结束位置)
注意事项
起始位置和结束位置可以省略,如果存在该元素,则显示第一次找到的位置
如果查找的元素不存在,则返回-1
字符串的替换
语法格式: 字符串.replace(旧字符,新字符,替换次数)
注意事项
替换次数可以省略不写,如果不写旧字符串存在多少个就替换多少个;如果写了次数,按照从先往后的顺序替换
字符串是不可变数据类型,有替换操作后原有的字符串没有变化
字符串的拆分
语法格式 : 字符串.split(分割符,分割次数)
字符串的连接
语法格式 : 连接字符.join(列表/元组)
列表
创建方式
方式一: 列表名 = []
方式二: 列表名 = list()
基本使用
字符串
下标取元素
语法格式: 字符串[下标值]
统计
语法格式: 字符串.count(被统计的元素)
长度
语法格式: len(字符串)
其他使用
列表元素增加
语法格式: 列表名.append(元素值)
默认在末尾追加
列表的合并
语法格式 : 列表名1.extend(列表名2)
直接使用+
列表元素插入
语法格式 : 列表名.insert(下标位置,元素值)
默认在末尾插入
列表删除操作
指定下标删除
语法格式: 列表名.pop(下标值)
注意事项
pop函数删除结果有返回值,删除的具体元素
如果pop函数后的下标不写,默认删除最后一个元素
按照元素删除
语法格式: 列表名.remove(被删除元素)
注意事项
remove删除没有返回结果
如果被删除的元素出现多次,只删除第一次出现的元素
列表的修改
下标修改元素
语法格式: 列表名[下标值] = 元素值
列表的反转
语法格式 : 列表名.reverse()
列表的排序
列表名.sort(key=None,reverse=False)
注意事项
reverse=False 表示升序,如果默认就是升序,可以不写reverse=False
reverse=True 表示降序,降序参数必须要写
key 非必填参数,表示排序的规则,默认没有规则为空
列表的复制
语法格式: 列表名.copy()
列表的嵌套
嵌套列表获取元素语法 : 列表名[最外层列表下标][嵌套列表的下标]
day4
元组
对于一串数据的定义,通过小括号括起来,内部包含不同类型的元素
格式
语法格式 : 变量名 = ()
语法格式 : 变量名 = tuple()
注意事项
如果定义元组中只有一个元素时,在该元素后面加","
元组的使用
下标访问
语法格式: 元组名[下标值]
统计元素个数
语法格式: 元组名.count(被统计元素)
计算元组长度
语法格式 : len(元组名)
字典
定义
方式一
语法格式(空字典) : 字典名 = {}
语法格式(非空) : 字典名 = {键1:值1,键2:值2,...}
方式二
语法格式 : 字典名 = dict()
注意事项
键(key)和值(value)之间通过冒号连接
键的构成必须是不可变数据类型,一般通过字符串表示,键不能重复
值的构成是任意的数据类型
基本使用
字典长度
语法格式 : len(字典名)
其他使用
数据的增加/修改
语法格式 : 字典名[键] = 值
注意事项
如果键不存在,表示新增数据
如果键存在,表示修改数据
数据的删除
语法格式 : del 字典名[键]
清空字典
语法格式: 字典名.clear()
数据的查询
方式一
语法格式 : 字典名[键]
注意事项
如果键存在,查出对应结果
如果键不存在,直接报错
方式二
语法格式 : 字典.get(键,默认值)
注意事项
通过get查询默认值可以不写
通过get查询如果键不存在,不会报错,返回None
通过get查询如果键不存在,并且有默认值时,返回默认值
数据的遍历
按照键遍历
语法格式 : for 临时变量 in 字典名.keys():
按照值遍历
语法格式 : for 临时变量 in 字典名.values():
按照键和值遍历
语法格式 : for 键临时变量,值临时变量 in 字典名.items():
函数
作用
能够通过函数提交代码编写的效率 (不需要再写一些重复的代码)
参数
作用
增强代码的灵活性
分类
形参
在定义函数,在函数名对应的括号内设置变量名(形参),相当于在函数内部定义的变量
实参
在调用函数时,通过函数名括号中传递需要的数据(实参)到函数内部过程
函数返回值
注意事项
在定义函数时,函数体中最后一行会有 return 关键字返回函数的结果
在调用函数时,通过定义一个变量接收函数返回的结果
在函数体中,出现return语句时,函数体中后续代码不执行,直接退出函数执行
变量的进阶
变量引用
定义
变量对应的数据在内存中的地址,通过变量名指向内存地址的过程叫变量的引用
查看对象地址的函数 : id(对象)
子主题 2
变量分类
局部变量
在函数内部定义的变量,作用范围只针对于函数内容
在函数被调用时,局部变量才能生效(内存创建空间),当函数调用结束后.局部变量被系统回收(内存地址被释放)
局部变量生命周期:从开始调用开始到调用结束的过程
全局变量
命名习惯 : 一般命名全局变量是前面追加 gl
全局变量位置
在函数定义(外部)的上方定义的变量
全局变量和局部变量的应用
函数调用时,在函数内部用到变量名先从函数内部找,如果找不到在函数外部(全局变量)找,如果还找不到直接报错
就近原则
day5
匿名函数
定义
lambda n个参数 :表达式 (n建议至少为 1)
作用
给其他函数(自定义函数/内置函数)传参
实例
函数进阶
返回值进阶
返回多个值
- return 后可以使用 逗号,隔分多个返回值。整个返回值,作为一个 元组 存在。
- 可以定义多个变量,依次接收元组中的每一个元素。
变量交换
三杯水法
数学运算法
元组交换法
参数进阶
赋值修改实参
无论可变、不可变类型,在函数内,都无法通过 “整体” 赋值,修改 传入的 实参值。
用方法修改实参
可变类型,在函数内部,可以通过 “下标运算” 或 “方法” ,修改 传入的 实参值
面试题"+="
可变类型,在使用 += 符号时,相当于使用了 “extend()” 方法。因此,可以直接修改 实参值
缺省参数
定义
在函数定义中,给形参设置默认值。
方式
使用 形参名 = 数据值的方式,不按顺序 给 形参填充数据
注意事项
1. 在函数定义时,没有缺省值的形参,必须 放在 有缺省值形参前面。
2. 在函数调用时
1. 可以按顺序传参,实参的传入顺序,必须按函数形参的定义顺序。
2. 也可以不按顺序传参,指定 形参名 = 数据值。
多值参数
存在形式
元组形式
形参名使用 *args
字典形式
形参名使用 **kwargs
面向对象
oop
面向对象编程
类和对象的概念
类的定义
具有相同属性和行为一个一类事物的统称。是抽象的,不是具体存在。 不能拿来直接使用
对象的定义
对象是类中的一个具体的存在
对象具备类的所有 特性(属性) 和 行为(动作
创建类对象
对象变量名 = 类名()
day6
self参数
特性
在 类定义外,调用方法、获取属性,使用 对象变量名
在类定义内,调用方法、获取属性,使用self
添加对象属性
外部添加
在类定义外,设置属性, 使用对象
对象名.属性名
内部添加
__init__() 方法
特性
由系统自动调用
创建类对象时,该方法会最先被自动调用
其他内置方法
dir() 函数
可以查看指定对象,具备的内置方法和其他内置属性
dir(对象名)
__del__() 方法
当类的对象,使用结束,即将被销毁前
也是内置的方法,会被系统自动
__str__() 方法
需要配合return使用
day7
身份运算符
is : 两个对象变量,存储的是相同的引用
is not:两个对象变量,存储的是不同的引用
面试题 is 和 ==
== :比较两个对象的值是否相同 (很有可能引用不同)
私有属性和方法
__属性名
__方法名
只能在 类定义内,使用 self 获取、调用
面对向三大特性
封装
根据需求,获取 属性、方法,封装到类定义中,借助类创建对象。 使用对象调用方法、获取属性的过程。
继承
父类的属性和方法,子类可以直接使用。提高代码的复用率
传递性
方法重写
子类对于父类继承过来的方法,对原有方法的增强
覆盖式重写
子类方法名,与父类的方法名完全一致
扩展式重写
在原有基础上,对方法的增强
多态
不同子类对象,调用同一个父类方法。有不同的结果!提高代码的灵活度
类对象
一个类只有一个 “类对象” 就是类名。
在类定义完成时,自动产生。不需要我们来创建
类属性和类方法
类属性名 = 属性值
@classmethod 类上添加 类装饰器,默认形参 cls
使用
类名.类方法名
静态方法
既没有用到实例属性、方法,也没有用到类属性、方法,场景下,可以定义静态方法
添加 静态装饰器 @staticmethod
day8
概念
异常
程序运行之后,产生的错误
抛出异常
程序在运行时,发现异常,终止程序执行,并显示错误信息的行为
msg = Exception('输入有误,密码不足8位')
raise msg
异常捕获
提早预见到代码可能出现异常的位置,编写程序,尽最大努力保证程序在运行时,不终止
基础语法
try:
有可能出现异常的代码
except:
一旦捕获到异常后,执行的代码。
捕获所有异常
try:
有可能出现异常的代码
except Exception as e:
一旦捕获到异常后,执行的代码。
异常传递性
异常,具有传递性! 如果有多 层函数(方法)嵌套调用,最内侧的函数(方法)产生异常,会直接传递给调用它的外层函数(方法)。 因此,我们 只需要对最外层调用函数,进行异常捕捉即可
模块和包
概念
一个 python 文件,就可以看做是一个 模块
导入模块
import
from...import
原则
如果 .py 文件,被当做模块使用时。所有的测试代码,都会自动被执行
将 模块的 .py 中的代码,放置 到 if __name__ == '__main__': 判别条件中。那么,当前 .py 文件再被当做模块使用时,就不会再执行测试代码
包
当需要导入大量模块时,可使用包(目录)管理模块,通过导包来使用模块中的 工具
使用
1. 向包中添加模块。
2. 修改 __init__.py 文件,管理 模块。 语法:from 包名.模块名 import 工具名
文件
文件读取
1. 打开文件 open() ,指定文件名。指定字符编码。
2. 关闭文件 close()
3. 在 打开、关闭代码中间,插入 代码,read() 读取文件内容。
文件写入
1. 打开文件 open() ,指定文件名,如果文件不存在,自动创建。指定文打开方式。指定字符编码。
2. 关闭文件 close()
3. 在 打开、关闭代码中间,插入代码,write() 写入内容到文件中
规则
day9
文件
读文件
with open('文件名', 'r', encoding='utf8') as 文件对象名:
content = 文件对象名.read()
写文件
with open('文件名', '访问权限w/a', encoding='utf8') as 文件对象名:
文件对象名.write()
大文件读写方法
json文件
语法规则
1. json文件的最外层,可以是 对象, 也可以是 数组。
2. 所有的数据均以 键值(kv)对 形式存在。
3. 所有的键,必须是字符串类型,用 “ ” 包裹!
4. 值的类型不限
5. 多个数值间, 用 “,” 分割。
读取json文件
常用方法
json.dumps
将Python对象编码成字符串
json.loads
将json字符串解码成Python对象
json.dump
将Python类型序列化位json对象 后,写入文件
json.load
读取文件中json对象转化为Python类型
day10
UnitTest框架
特点
1. 组织多个测试用例,批量运行。
2. 提供较为丰富的断言方法。
3. 生成测试报告
组成
1. TestCase: 测试用例。(不同于 功能测试、UI测试 接触的测试用例)
2. TestSuite: 测试套件。组装测试用例。
3. TestRunner: 测试执行。运行 测试套件。
4. TestLoader: 测试加载。升华版的测试套件。 也是用来 组装 测试用例。
5. Fixture: 测试夹具。表示 UnitTest 框架代码书写的风格。
TestSuite
添加套件方式
1,suite.addTest(Test('test_demo2'))
2,case = [Test('test_demo2'),Test('test_demo1')] suite.addTests(case)
3,discover = unittest.defaultTestLoader.discover(start_dir='./', pattern='test.py')
4,suite.addTest(unittest.makeSuite(Test))
TestRunner
runner = unittest.TextTestRunner() # 创建 TextTestRunner类的 实例
runner.run(suite)
TestLoader
与 TestSuite 作用一致,组装测试用例。适用于 测试类、测试方法足够多的场景
Fixture
使用 UnitTest框架时,代码书写的风格
方法级别
setUp(self)
tearDown(self)
类级别
- @classmethod
- setUpClass(cls): 类级别的创建方法
tearDownClass(cls): 类级别的销毁方法
模块级别
def setUpModule():
def tearDownModule():
断言
assertEqual() 判等
参1:预期结果(已知条件)
参2:实际结果(程序运行后得到
assertIn() 判断是否包含
参数化
parameterized插件
测试方法的上一行,添加 装饰器 @parameterized 调用 expand(变量名) 方法
ddt插件
加在方法上@data(*形参)
加在方法上@unpack解析参数
@ddt
skip装饰器
@unittest.skip('跳过的原因')
@unittest.skipIf(判断条件,'跳过的说明') 条件 为True的时候跳转
@unittest.skipUnless(判断条件,'跳过的说明') 条件为False的时候跳转