测试图书
测试图书
测试页面
1121212121
测试章节
测试章节
新页面
-
Python数据类型有哪些
考点:
你是否懂可变 / 不可变,会不会踩坑
你是否清楚各类型适用场景
你基础扎不扎实,有没有写过实际代码
Python 数据类型主要分为基本数据类型和复合 / 容器数据类型两大类,另外还有一些高级常用类型。
基本数据类型(不可变类型)
-
int:整数,如 1、100、-5
-
float:浮点数,如 3.14、2.0
-
bool:布尔型,只有
True和False -
str:字符串,用单引号 / 双引号包裹,如
"test" -
NoneType:空类型,只有一个值
None
容器 / 复合数据类型(可存放多个元素)
-
list(列表):有序、可变、可重复,用
[]表示 -
tuple(元组):有序、不可变、可重复,用
()表示 -
dict(字典):键值对结构,key 必须不可变,用
{}表示 -
set(集合):无序、无重复元素,用于去重和集合运算
常见高级 / 扩展类型(加分项)
-
bytes /bytearray:字节类型
-
complex:复数
-
内置模块中的类型:
datetime、array、enum等
这里有一个非常关键的考点:可变类型和不可变类型。
-
不可变类型:int、float、str、bool、tuple、None特点:修改后会生成新对象,不会改变原数据。
-
可变类型:list、dict、set特点:可以在原对象上直接增删改,不会生成新对象。
这道题本身不难,但可变与不可变是后面一系列问题的基础。回答时先分类、再举例、最后点出核心考点,面试官会直接觉得你基础很扎实。
-
可变类型和不可变类型有哪些使用场景?
一、不可变类型的实际工作例子(int /str/tuple /bool)
-
int 整数(不可变)
-
用例编号:
case_id = 1001 -
接口用例的超时时间:
timeout = 5 -
断言状态码:
assert status_code == 200 -
循环次数:
for i in range(10)
特点:数字一旦定义,不会在代码里偷偷被改掉,非常安全。
-
str 字符串(不可变)
-
接口地址:
url = "http://xxx.com/login" -
请求头:
token = "Bearer xxxxx" -
测试数据:
username = "test01" -
断言信息:
assert "登录成功" in response.text
工作重点:字符串不可变,所以不会在函数传递中被意外修改,非常适合做配置、固定参数。
-
tuple 元组(不可变)【测试高频】
-
接口用例的参数集合:
暂时无法在飞书文档外展示此内容
-
多环境配置:
暂时无法在飞书文档外展示此内容
-
数据库查询条件:
暂时无法在飞书文档外展示此内容
为什么用 tuple?因为不可变 = 安全,防止代码里不小心把用例关键字段改掉,导致用例失败。
-
bool 布尔(不可变)
-
用例开关:
is_run = True -
断言结果:
assert is_success is True
二、可变类型的实际工作例子(list /dict/set)
-
list 列表(可变)【最常用】
-
存储多条测试用例:
暂时无法在飞书文档外展示此内容
-
动态添加用例:
暂时无法在飞书文档外展示此内容
-
接口返回的列表数据:
暂时无法在飞书文档外展示此内容
特点:可以随时增删改,适合动态数据、批量数据。
-
dict 字典(可变)【测试核心】
-
接口请求参数:
暂时无法在飞书文档外展示此内容
-
接口返回结果:
暂时无法在飞书文档外展示此内容
-
测试报告数据:
暂时无法在飞书文档外展示此内容
工作重点:字典是键值对,取数据极快,是接口测试最最常用的数据类型。
-
set 集合(可变)
-
自动去重:
暂时无法在飞书文档外展示此内容
-
判断用户是否已存在:
暂时无法在飞书文档外展示此内容
用途:去重、快速判断存在。
不可变类型(int/str/tuple)
用于:固定配置、用例关键字段、环境信息、数据库参数目的:保证数据不被意外修改,安全稳定
可变类型(list/dict/set)
用于:请求参数、返回数据、测试用例列表、动态数据目的:方便增删改查,灵活处理业务数据
-
Python中数据类型相互直接转换方法
Python 类型转换非常统一,基本就是内置函数强转,记住这 8 个就够:
-
int()→ 转整数 -
float()→ 转浮点数 -
str()→ 转字符串 -
bool()→ 转布尔值 -
list()→ 转列表 -
tuple()→ 转元组 -
set()→ 转集合 -
dict()→ 转字典(需要键值对结构)
-
字符串 ↔ 数字(接口测试最常用)
暂时无法在飞书文档外展示此内容
工作场景:接口返回是字符串,要做数值断言;或把数字拼接到 URL 里。
-
列表、元组、集合互转
暂时无法在飞书文档外展示此内容
工作场景:需要去重用 set,需要不可变数据用 tuple。
-
转布尔值 bool ()(面试坑点)
暂时无法在飞书文档外展示此内容
考点:空内容、0、None 为假,其他都为真。
-
转字典 dict ()
暂时无法在飞书文档外展示此内容
工作场景:处理用例数据、数据库结果转字典。
高频注意点
-
不是所有字符串都能转数字纯数字字符串才行,
int("abc")直接报错 -
集合、字典不能直接转数字
-
tuple 转 list 后才能增删改
-
list 转 set 会自动去重、且无序
总结
在 Python 里,类型转换就是用对应的内置函数:
int、float、str、bool、list、tuple、set、dict。实际工作中,最常用的就是字符串和数字互转、列表集合互转,做接口测试、自动化脚本时几乎天天用到。
-
除了内置函数,还有哪些方法可以实现数据类型转换?
除了
int()/str()/list() 这类内置强转函数,常用的类型转换方式还有 4 类,都是工作中高频使用的:-
json 模块(str ↔ dict/list 互转)
-
eval /literal_eval(字符串转原有类型)
-
encode /decode(str ↔ bytes 互转)
-
split /join(字符串与列表互转)
下面一个个讲用法和场景。
json 模块(接口测试最最常用)
接口测试:把返回的字符串转成字典(最常用)
接口返回的数据是字符串格式,不能直接取值,必须用
json.loads() 转成字典。暂时无法在飞书文档外展示此内容
场景:接口请求、接口自动化、结果判断。
接口测试:把字典转成字符串发送请求
构造请求体是字典,需要转成json 字符串传给接口。
暂时无法在飞书文档外展示此内容
场景:POST 请求、请求体封装、接口联调。
读取配置文件:json 文件 → 字典
项目里的环境配置、用例配置,都存在
config.json 文件中。暂时无法在飞书文档外展示此内容
场景:多环境切换、读取配置、数据驱动。
写入数据到 json 文件
把测试结果、token、用例数据保存到文件。
暂时无法在飞书文档外展示此内容
场景:自动化测试结果记录、登录态保存、数据持久化。
【必须记住的两个核心方法】
-
json.loads():字符串 → 字典
-
json.dumps():字典 → 字符串
-
json.load():读 json 文件 → 字典
-
json.dump():字典 → 写入 json 文件
在软件测试工作中,json 模块最核心的 4 个场景:
-
接口返回字符串转字典,用于断言
-
请求字典转字符串,用于接口请求
-
读取 json 配置文件
-
写入数据到 json 文件
它是接口测试、自动化测试最核心、最基础、最常用的模块。
除了
json 模块,常用的还有 3 种方式,都能实现字符串和字典互转:-
eval(简单粗暴,但不安全)
-
ast.literal_eval(官方推荐、最安全)
-
正则表达式 re(极端场景手动解析)
eval(最简单,但不推荐生产使用)
直接把字符串当成 Python 代码执行。
暂时无法在飞书文档外展示此内容
优点:
-
支持单引号、双引号
-
不用导入模块
-
能解析 list/tuple/dict 全部类型
缺点:
-
极度不安全
-
用户传入恶意代码会直接执行
-
公司项目严禁使用
ast.literal_eval(最推荐、最安全、企业标准方案)
这是 eval 的安全版,只会解析数据类型,不执行代码。面试必说这个!
暂时无法在飞书文档外展示此内容
优点:
-
✅ 支持单引号、双引号
-
✅ 安全、不会执行恶意代码
-
✅ 接口自动化、数据驱动最常用
-
✅ 能解析 dict、list、tuple、int、str 等
缺点:
-
不能解析复杂表达式
工作场景:Excel 读取字典字符串、配置文件解析、用例数据处理
表格 还在加载中,请等待加载完成后再尝试复制
正则 re.match/re.findall(手动解析)
极端场景:
-
字符串不是标准 JSON
-
不是 Python 格式
-
脏数据、日志、报文
手动提取 key、value 拼成字典。
暂时无法在飞书文档外展示此内容
优点:
-
能处理任何不规则字符串
缺点:
-
麻烦
-
一般只用在日志解析、抓包报文处理
json.loads vs ast.literal_eval
-
json.loads
-
只能解析双引号
-
安全
-
只能解析标准 JSON
-
-
ast.literal_eval
-
单引号、双引号都支持
-
安全
-
解析能力更强
-
测试工作中更常用
-
面试和工作中,优先用 ast.literal_eval,其次用 json.loads。
encode /decode(字符串 ↔ 字节串)
暂时无法在飞书文档外展示此内容
场景
-
接口二进制数据
-
文件读写
-
加密、签名、token 处理
split /join(字符串 ←→ 列表)
暂时无法在飞书文档外展示此内容
场景
-
处理用例参数
-
处理日志、URL 参数
-
拼接断言关键字
yaml 模块(自动化框架必备)
作用:读取
.yaml / .yml 配置文件 → 转字典 / 列表。测试场景:环境配置、用例数据、接口地址配置。
暂时无法在飞书文档外展示此内容
pickle 模块(Python 专属序列化)
作用:把任意 Python 对象(列表、字典、类、函数)转二进制存储,再还原。
特点:只支持 Python,不能跨语言。
场景:保存登录状态、缓存数据、对象持久化。
暂时无法在飞书文档外展示此内容
csv /openpyxl 模块(数据驱动核心)
作用:读取 Excel、CSV 文件 → 转列表 / 字典。
测试场景:测试用例数据驱动、接口参数化。
暂时无法在飞书文档外展示此内容
base64 /hashlib 模块(加密 / 编码转换)
作用:字符串 ↔ base64 字符串 ↔ 字节串 互转。
场景:接口加密、签名、图片转码。
暂时无法在飞书文档外展示此内容
总结
除了基础的 int ()、str () 内置函数,真正工作和面试中高频的类型转换还有:
-
json 模块:str 和 dict/list 互转(接口测试核心)
-
literal_eval:字符串还原成原数据类型
-
encode/decode:字符串与字节串互转
-
split/join:字符串与列表互转
-
yaml → 读取配置
-
openpyxl → 数据驱动
-
pickle/base64 → 缓存与加密
这些都是做自动化、接口测试几乎每天都用的。本质是看你有没有做过自动化框架、数据驱动、配置管理。
-
如何将字典转换为列表或元组
在 Python 中,把字典转列表 / 元组,主要有3 种目标形式:
只转换 键 (Key)
暂时无法在飞书文档外展示此内容
只转换 值 (Value)
暂时无法在飞书文档外展示此内容
转换 键值对 (整体)
暂时无法在飞书文档外展示此内容
面试大坑:直接强转
千万不要直接用 list (字典)!
暂时无法在飞书文档外展示此内容
面试官必问:直接转为什么只有键?答:因为字典遍历默认遍历的是键 (Key)。
工作实际场景
-
提取接口返回字段名
暂时无法在飞书文档外展示此内容
-
数据驱动用例
暂时无法在飞书文档外展示此内容
总结
字典转列表 / 元组,记住三个核心方法:
-
keys() —— 拿所有键
-
values() —— 拿所有值
-
items() —— 拿键值对直接强转
list(字典)默认只拿键,这是面试高频坑点。
-
数据类型转换可能会遇到哪些问题?如何解决
字符串不是纯数字,转 int/float 直接报错
问题场景
-
接口返回
"123a"、"null"、""空字符串 -
用
int("123a")直接抛异常ValueError
解决方法
-
先做非空、格式校验,再转换
-
用 try-except 捕获异常,避免用例直接中断
-
对脏数据给默认值
暂时无法在飞书文档外展示此内容
单引号字典字符串,json.loads 解析失败
问题场景
-
Excel / 配置文件里是
{'name':'test'}单引号格式 -
json.loads只认双引号,直接报错
解决方法
-
优先使用 ast.literal_eval(支持单引号、最安全)
-
或者替换单引号为双引号再用 json.loads
暂时无法在飞书文档外展示此内容
空值 None、空字符串转数字 / 布尔值不符合预期
问题场景
-
int(None)直接报错 -
bool("False")结果是 True,因为非空字符串都为真 -
接口返回
null转数字失败
解决方法
-
先判断是否为 None / 空,再处理
-
布尔值不要强转,直接判断字符串内容
暂时无法在飞书文档外展示此内容
集合、字典、列表直接转数字报错
问题场景
-
int([1])、int({ "a": 1 })直接报错 -
新手常误以为能自动提取里面的值
解决方法
-
先通过索引、key 把真实值取出来,再转换
-
不要对容器类型直接强转数字
暂时无法在飞书文档外展示此内容
编码问题导致 str/bytes 转换乱码
问题场景
-
encode/decode用了 gbk、utf-8 不统一 -
接口二进制、图片、加密串转字符串出现乱码
解决方法
-
统一使用 utf-8
-
捕获
UnicodeDecodeError,设置忽略错误
暂时无法在飞书文档外展示此内容
为了避免类型转换出问题,我们在项目里一般会这么做:
-
所有转换都加 try-except,不让脚本直接崩
-
数据先校验再转换:非空、格式、长度、范围
-
优先用 ast.literal_eval,少用 eval,标准 json 用 json 模块
-
对接口返回做字段类型断言,提前发现问题
-
封装公共工具方法:str_to_int、str_to_dict 统一处理
结尾
在实际项目中,数据类型转换常见问题主要是:格式不合法、单双引号不兼容、空值脏数据、编码乱码、容器直接强转。解决思路就是:先校验、再捕获异常、统一编码、使用安全的转换方法,这样写出来的自动化脚本才稳定、不轻易报错。
-
如何对excel操作
Python 处理 Excel 主要用三个库:xlrd/xlwt、openpyxl、pandas,根据场景选择。
常用库与适用场景
-
xlrd / xlwt
-
读写 .xls 格式(Excel 97-2003)
-
xlrd 新版只支持读,不支持写
-
适合老旧格式文件
-
-
openpyxl
-
读写 .xlsx(Excel 2007+)
-
支持单元格样式、公式、图表、批注
-
适合精细化操作(改格式、设置公式、逐单元格处理)
-
-
pandas
-
基于 openpyxl/xlrd 封装
-
读写速度快,适合数据分析、批量处理
-
简单几行就能读写、筛选、汇总
-
企业最常用
-
核心操作代码
(1)pandas 读写(最常用)
暂时无法在飞书文档外展示此内容
(2)openpyxl 精细化操作
暂时无法在飞书文档外展示此内容
高频考点
-
读取多个 sheet
-
pandas:
sheet_name=None返回字典 -
openpyxl:
wb.sheetnames遍历
-
-
筛选、过滤数据pandas 直接条件筛选:
暂时无法在飞书文档外展示此内容
-
合并、去重、空值处理
暂时无法在飞书文档外展示此内容
-
设置样式、字体、颜色用 openpyxl 设置 Font、PatternFill 等。
-
大数据量处理
-
超大数据可用
chunksize分块读取
-
一句话总结
简单数据分析、批量处理用 pandas;需要精细控制单元格、样式、公式用 openpyxl;老旧 .xls 文件用 xlrd/xlwt。
-
布尔值可以进行哪些运算?
布尔值(True 和 False)主要用于逻辑判断,支持以下运算:
-
逻辑运算
与(and):两边都为 True 时结果才为 True,否则为 False例:True and True → True;True and False → False
或(or):至少一边为 True 时结果为 True,否则为 False例:True or False → True;False or False → False
非(not):取反,not True → False,not False → True
-
比较运算布尔值可与其他数据类型进行比较(True 等价于 1,False 等价于 0):
例:True == 1 → True;False > 0 → False
-
数值运算(不推荐,但语法允许)布尔值可参与加减等运算(本质是 1 和 0 的运算):
例:True + True → 2;False * 5 → 0
-
列表(list)、元组(tuple)、集合(set)和字典(dict)的区别
这四个是 Python 最核心的数据结构,我用最直白、最好记的方式给你讲清楚区别,看完就能直接用。
一句话总览
-
list(列表):有序、可改、可重复
-
tuple(元组):有序、不可改、可重复
-
set(集合):无序、可改、不可重复
-
dict(字典):键值对、键唯一、无序(3.7 + 有序)
详细对比
list 列表 []
-
写法:
[1, 2, 3] -
有序:有索引,能按位置取
-
可修改:增删改查都行
-
可重复
-
用途:存一组有序数据,比如成绩、名单
暂时无法在飞书文档外展示此内容
tuple 元组 ()
-
写法:
(1, 2, 3) -
有序
-
不可修改(不能增删改)
-
可重复
-
用途:固定不变的数据,如配置、坐标
暂时无法在飞书文档外展示此内容
set 集合 {}
-
写法:
{1,2,3} -
无序(没有索引)
-
自动去重
-
可增删,但不能存重复值
-
用途:去重、判断是否存在、交集并集
暂时无法在飞书文档外展示此内容
dict 字典 {key:value}
-
写法:
{"name":"张三", "age":20} -
键值对结构
-
键必须唯一,重复会覆盖
-
3.7 版本后有序,之前无序
-
用途:存结构化信息,类似对象
暂时无法在飞书文档外展示此内容
一张表彻底记住
表格 还在加载中,请等待加载完成后再尝试复制
最简单使用场景口诀
-
要有序可改 → list
-
要固定不变 → tuple
-
要去重 / 快速查找 → set
-
要键值对存信息 → dict
-
列表、元组、集合和字典的应用场景分别是什么
list 列表:最常用,日常 “万能容器”
特点:有序、可修改、可重复一句话场景:需要按顺序存一堆东西,后面还要增删改。
你在测试里最常用:
-
存用例列表:
test_cases = ["登录", "退出", "查询"] -
存接口参数组合:
params = [{"id":1}, {"id":2}] -
存循环读取的数据:
user_list = []后面不断 append -
存日志、结果、截图路径
什么时候用 list?
数据要顺序不乱,还要随时增删改。
tuple 元组:固定不变的 “安全包”
特点:有序、不可修改、可重复一句话场景:数据一旦确定就不能改,防止误操作。
测试 / 开发常用:
-
配置项:
HOST = ("192.168.1.1", 8080) -
固定枚举值:
STATUS = ("成功", "失败", "异常") -
函数多返回值:
return code, msg本质就是元组 -
作为字典的 key(list 不行,tuple 可以)
什么时候用 tuple?
不想别人 / 自己手贱改了关键数据,用它最安全。
set 集合:去重 + 快速查找
特点:无序、自动去重、查找极快一句话场景:去重、判断是否存在、交集差集。
测试里非常实用:
-
去掉重复数据:
user_ids = list(set(old_ids)) -
判断元素是否存在(比 list 快很多):
if name in black_set: -
对比两个列表差异:
-
只在 A 不在 B:
set(A) - set(B) -
共同数据:
set(A) & set(B)
-
-
存唯一标识:token、id、手机号去重
什么时候用 set?
只要涉及去重、快速判断存在、对比差异,首选 set。
dict 字典:结构化数据,键值对
特点:key-value 结构、key 唯一、可修改一句话场景:一个对象有多个属性,用名字取数据。
测试里几乎天天用:
-
接口请求参数:
暂时无法在飞书文档外展示此内容
-
接口返回结果解析
-
用例信息:
case = {"id":1, "title":"登录", "expect":200} -
配置字典、header、cookies
什么时候用 dict?
要描述一个东西的多个属性,不用下标,用名字取。
超级精简总结(适合记)
-
list:顺序存放、可修改 → 存列表、用例、结果
-
tuple:固定不变、防篡改 → 配置、固定参数
-
set:去重、快速查找 → 去重、判存在、对比差异
-
dict:键值对、结构化 → 接口参数、返回数据、对象信息
-
列表的增删改查方法
列表格式:
lst = [1, 2, 3, 4]一、增(添加元素)
append (元素)
加到末尾
暂时无法在飞书文档外展示此内容
insert (索引,元素)
插到指定位置
暂时无法在飞书文档外展示此内容
extend (列表)
把另一个列表合并进来
暂时无法在飞书文档外展示此内容
直接 +
暂时无法在飞书文档外展示此内容
二、删(删除元素)
del 语句
按索引删
暂时无法在飞书文档外展示此内容
pop (索引)
按索引删,并返回被删元素
暂时无法在飞书文档外展示此内容
不写索引默认删最后一个:
暂时无法在飞书文档外展示此内容
remove (元素)
按值删(删第一个匹配的)
暂时无法在飞书文档外展示此内容
clear()
清空列表
暂时无法在飞书文档外展示此内容
三、改(修改元素)
直接通过索引赋值
暂时无法在飞书文档外展示此内容
四、查(查找、获取)
按索引取
暂时无法在飞书文档外展示此内容
切片取一段
暂时无法在飞书文档外展示此内容
index (元素)
找元素第一次出现的索引
暂时无法在飞书文档外展示此内容
count (元素)
统计出现次数
暂时无法在飞书文档外展示此内容
in 判断是否存在
暂时无法在飞书文档外展示此内容
五、常用其他方法
-
排序:
lst.sort() -
反转:
lst.reverse() -
长度:
len(lst)
一句话速记
-
增:append /insert/extend
-
删:del /pop/remove /clear
-
改:直接索引赋值
-
查:索引、切片、index、count、in
-
字典的增删改查
字典(dict)的增删改查非常简单,核心就是通过 键(key) 操作
示例字典:
暂时无法在飞书文档外展示此内容
一、增(添加键值对)
1. 直接赋值(不存在就是新增)
暂时无法在飞书文档外展示此内容
2. update() 批量添加/更新
暂时无法在飞书文档外展示此内容
二、删(删除键值对)
1. del 删除指定 key
暂时无法在飞书文档外展示此内容
2. pop(key) 删除并返回值
暂时无法在飞书文档外展示此内容
3. popitem() 删除最后一对(Python3.7+)
暂时无法在飞书文档外展示此内容
4. clear() 清空字典
暂时无法在飞书文档外展示此内容
三、改(修改值)
通过 key 直接赋值(存在就是修改)
暂时无法在飞书文档外展示此内容
批量修改用
update():暂时无法在飞书文档外展示此内容
四、查(获取值)
1. 直接通过 key 获取(推荐)
暂时无法在飞书文档外展示此内容
⚠️ 缺点:key 不存在会报错。
2. get() 安全获取(最常用)
暂时无法在飞书文档外展示此内容
3. 获取所有 key
暂时无法在飞书文档外展示此内容
4. 获取所有 value
暂时无法在飞书文档外展示此内容
5. 获取所有键值对
暂时无法在飞书文档外展示此内容
6. 判断 key 是否存在
暂时无法在飞书文档外展示此内容
一句话总结
-
增:
dict[key] = 值/update() -
删:
del/pop()/clear() -
改:
dict[key] = 新值 -
查:
dict[key]/get()/keys/values/items
列表靠「位置下标」操作,字典靠「键名 key」操作
-
集合的增删改查
集合(set)最核心特点:无序、无下标、元素不可重复、可哈希
示例:
暂时无法在飞书文档外展示此内容
一、增
1. add(元素)
添加单个元素
暂时无法在飞书文档外展示此内容
2. update(可迭代对象)
批量添加(列表、元组、字符串都行)
暂时无法在飞书文档外展示此内容
二、删
1. remove(元素)
删除指定元素,不存在会报错
暂时无法在飞书文档外展示此内容
2. discard(元素)
删除指定元素,不存在不报错(推荐使用)
暂时无法在飞书文档外展示此内容
3. pop()
随机删除一个元素,并返回它
暂时无法在飞书文档外展示此内容
4. clear()
清空集合
暂时无法在飞书文档外展示此内容
三、改
⚠️ 集合没有 “修改” 操作
因为:
-
无序,没有下标
-
元素不可变(不能改里面的值)
真要改,只能:先删旧的,再加新的。
四、查
集合不能通过下标/索引查,只能:
1. 判断是否存在
暂时无法在飞书文档外展示此内容