Python + AI 复习题
1 .*args:接收任意多个【普通位置参数】,打包成元组 tuple,args 就是元组变量名, *= 打包符号,args是约定名字(可以改成*nums、*data,但规范写 args)
**kwargs:接收所有 key=value 格式的关键字实参,自动打包成字典 dict。
*args→ 打包位置参数(1,2,3)→ 元组**kwargs→ 打包关键字参数a=1,b=2→ 字典
2. 字典 .items () 方法
遍历字典键值对(k,v),返回可迭代对象,配合 for k,v in ... 拆包
.keys():只遍历键.values():只遍历值.items():键 + 值一起取出
3. 列表推导式
[表达式 for 变量 in 可迭代对象]
4.lambda 匿名函数 : lambda 入参: 返回表达式
lambda x: x + "!":接收 x,返回x加感叹号
5.**字典 字典拆包
**result:把字典 {"city":"北京","temp":"25℃"}拆成关键字实参:city="北京", temp="25℃"
6.字符串.format() 模板替换
{变量名} 占位符,.format(关键字参数)自动替换占位内容
7. *列表 → 拆 / 收 列表、元组 , 拆成位置参数 (1,2,3)
**字典 →拆 / 收 字典 , 拆成关键字参数 k1=v1,k2=v2
8.yield → 生成器标志
- 函数里出现
yield,这个函数不再返回普通值,而是返回生成器对象(generator)。 yield 数据:暂停函数、抛出当前片段,下次迭代从暂停位置继续往下执行 , 一次只占一块内存;return:直接终止函数,一次性返回数据、函数结束。
9.__repr__(self) 调试打印魔法方法
print(对象)时自动调用,自定义对象输出字符串;- 不写
__repr__:默认打印内存地址<__main__.Document object at ...>,不方便调试; - 格式化 f-string:
{变量}填充数据。
10. try-except-finally 完整异常结构
try:包裹可能报错的代码(接口调用最容易报错,放这里)
except 指定异常类:精准捕获对应错误,细分异常优先写在前(先抓具体错误,再抓通用错误)
PermissionError:权限 / 密钥鉴权失败(OpenAI 密钥错误、余额不足属于这类业务异常)Exception:Python 通用父类,能捕获绝大多数非系统致命异常,用来兜底所有未知报错
finally:无论 try 里正常运行 / 触发 except 报错,代码一定会执行(接口调用结束收尾固定放这里)
11. open() 函数:文件操作入口
- 作用:Python 内置函数,用来打开文件,返回文件对象。
- 语法:
open(filepath, mode, encoding=...)filepath:文件路径;mode="r":只读模式(read),默认值,只能读取文件,不能修改;encoding="utf-8":指定编码格式,避免中文乱码,读取文本文件时强烈建议加上。
f.read() 方法:读取文件全部内容
with ... as f: 上下文管理器(重点!)
- 作用:自动管理文件资源,代码执行完会自动关闭文件,不用手动写
f.close(),即使中间报错也能保证文件正常关闭,避免资源泄漏。 - 是 Python 读写文件的标准推荐写法,比裸写
open()+close()更安全。
split() 分割
content.split("。"):按中文句号 。 分割文本,把长文本切成句子列表。
strip() 去空白
s.strip():去掉句子前后的空白(空格、换行、制表符),比如句子前后的空格、换行符会被删掉。
if s.strip():过滤掉空白句子。因为 split("。") 后可能会出现空字符串(比如文本末尾的句号分割出的空元素),s.strip() 会把空白字符串转为空,在列表推导式里作为条件,空值会被过滤掉。
12.json.dump()写入文件直接操作文件对象,生成 .json 文件
json.dumps()转成 JSON 字符串只返回字符串,不写入文件
json.load()读取文件直接从文件对象读取,还原成 Python 数据
json.loads()解析 JSON 字符串从字符串解析,不涉及文件操作
json.dump() + json.load() 是 JSON 文件读写的标准组合,必须牢记用法。
13.按固定长度 chunk_size 切割文本
range(0, len(content), chunk_size) 是按步长切割的标准写法;
content[i:i+chunk_size] 切片取出每一段文本。
14.re.findall() 函数(提取匹配内容)
在字符串中,找出所有匹配正则模式的子串,返回一个列表。
15.[]:字符集,表示匹配其中任意一个字符;
+:量词,表示匹配前面的模式一次或多次
16.re.sub() 函数(替换 / 清洗文本)
用指定内容,替换字符串中所有匹配正则模式的子串,返回处理后的新字符串。
17.空白字符正则 \s+
\s:匹配任意空白字符,包括空格 、换行 \n、制表符 \t 等
18.messages 角色的作用:system 设定人设、user 发起提问
响应体解析:choices[0].message.content 是获取回复文本的固定写法。
OpenAI SDK 的标准调用流程:初始化客户端 → 发送请求 → 解析响应
API 密钥的安全管理:使用环境变量 OPENAI_API_KEY
19.stream=True:开启流式模式 , 模型生成一点就发一点,前端可以实时显示,用户体验更流畅。
stream=False 时,API 会等模型生成完所有内容再一次性返回,体验有延迟。
20.三种 Chat API 角色的核心作用
system给模型设定角色、规则和行为边界,决定它怎么说话、做什么
user用户提出的问题或指令
assistant模型生成的回答 / 回复
21.环境变量读取
os.getenv("OPENAI_API_KEY") 是读取 API Key 的标准方式
OpenAI Chat API 调用格式
messages必须包含system和user角色- 响应内容通过
response.choices[0].message.content获取 model参数(如gpt-3.5-turbo)是必填项
22. async def 和 await
async def用来定义异步函数(协程)await asyncio.sleep(t)用来模拟耗时操作,让出 CPU,让其他任务有机会执行- 只有
async函数内部才能使用await
23.asyncio.gather() 的作用
asyncio.gather(*tasks) 会:
- 接收多个协程 / 任务,并发执行它们
- 等所有任务完成后,按传入顺序返回结果列表
- 总耗时 ≈ 任务中耗时最长的那个,而不是时间相加
24.asyncio.run(main())
- Python 3.7+ 的标准入口方式
- 负责创建事件循环,运行
main()协程,结束后关闭循环
25.分词:用 jieba.cut() 对问题和知识库文本分词,转成集合方便求交集。
26.排序与筛选:sort(reverse=True, key=lambda x: x[0]) 按分数从高到低排序,取前 top_k 条并过滤掉 0 分文档。
27.关键词重叠法的两个局限
1.无法理解语义和同义词关系
2.无法处理语序、句式和歧义,容易误匹配
28.向量检索(embedding-based retrieval)如何解决
对于同义词、近义词,模型会生成相似的向量
向量捕捉了文本的整体语义信息,语序、句式和多义词的影响会被大幅削弱,模型能理解句子的 真实含义,从而避免了字面匹配的缺陷。
更多推荐



所有评论(0)