本文由WorkBuddy根据逐字稿生成,直播于8月10日15点。不构成学习建议,深度学习请去看回放链接:https://lmcc.ccf.org.cn/101/1010/10297.html文末增加交流群,专门交流LMCC青少组,欢迎想要了解学习的朋友们。💡 一句话导读:LMCC 里的 Python 难点不在算法本身,而在"认字"——认出 AI 代码里那些高频写法(列表推导式、*args/**kwargs、with、lambda、class)到底在干什么。本节课带你"语法体检 + 真题手读 + 手搓迷你 RAG"。
一、开场与讲师介绍
主持人开场:前两讲陈子恒老师带大家过了一遍大纲核心点,很多同学对大模型底层数学产生了浓厚兴趣。随着研究深入,大家会发现 Python 是 LMCC 认证里最基础的语言。今天特地邀请信奥领域的李超老师,带大家速通 Python。
李超老师简介:元编程高级算法与人工智能课程讲师,9 年 C++ 青少年编程教育与一线教学经验;信息学奥赛头部博主,全网粉丝 10w+;与清华大学出版社、人民邮电出版社签约,推出面向青少年的算法与编程系列著作;曾受邀参与央视访谈节目《对话素质教育引路人 见证智慧教育先行者》。
二、为什么 LMCC 也要考 Python?
核心原因:我们要和大模型(千问、GPT、DeepSeek 等)打交道,而跟它们打交道的代码就是用 Python 写的。以前学 Python 可能只是写个函数判奇偶、排个序,逻辑单一;但 LMCC 的 Python 题会直接甩给你一段调用大模型 API 的代码,让你读懂、填空、改参数。
关键变化:不要求从零手写算法,而是要求你"认识 AI 圈子里常用的写法"——比如列表推导式、*args、**kwargs、with 语句、类的写法。今天目标:把这些面生的写法扫一遍,再拿真题练手,做到看到类似代码"一看就懂"。
三、Python 语法快速体检
1. 变量与数据类型(不用声明,一切皆对象)
和 C++ 不同,Python 不用声明类型——把 10 赋给 x,x 就是整型;后面还能变成字符串。数字、字符串、函数、类本质上都是对象,都能赋值给变量、当参数传递。社区非常看重可读性,所以才有了推导式、with 这类"让代码更短更清楚"的写法。
2. 条件与循环(缩进是唯一分块方式)
Python 不用大括号,靠缩进表示"谁属于谁",缩进错了直接报错——这是新手最容易犯的错(C++ 缩进无所谓)。
if / elif / elsefor i, x in enumerate(kb):同时拿到下标 i 和元素 x(对标 C++ 的索引),打印序号或按位置处理时极常用;while len(cands) < top_k:条件为真就一直循环,是"凑数量兜底"的常用写法。
3. 函数定义(def + 默认参数 + f-string)
默认参数:def retrieve(problem, kb, top_k=3) 中 top_k=3 是默认值,不传就自动取 3(例如只取最相关的前 3 首诗)。f-string:f"问题:{question}" 是拼字符串最常用的写法——花括号里直接写变量名,自动替换值。这在构造 prompt 的代码里几乎必用(例如 f"作者是谁:{question}")。
四、AI 代码里必认的 6 个高频写法
① 列表推导式:把 for 循环压成一行
看不懂时记住翻译技巧:倒着读——先看 for item in candidates(遍历),再看前面 item.score(取字段),整体即"把每个候选的 score 取出来组成新列表"。带 if 的就是筛选,如 [c for c in candidates if c.score > 0.5] 表示"只保留分数大于 0.5 的候选"。
② 字典推导式 vs 集合推导式:看括号认写法
两者都用大括号,区别在有没有冒号:带冒号 {k: v} 是字典推导式;无冒号 {x} 是集合推导式(自动去重)。生成器表达式用小括号(x),更省内存、适合只用一次。
③ lambda:匿名函数,排序键最爱
sort(key=lambda item: item.score, reverse=True) 等价于单独定义一个 get_score 函数再传进去,但不用起名。因为这个函数只在一处用,lambda 更省事。同理 max(list, key=lambda x: x.score) 按 score 找最大。老师原话:身边有 lambda 写得特别厉害的同学,一定要想办法和他做朋友——这种人思维非常适合电脑,容易脱颖而出。
④ *args 与 **kwargs:调用 API 的常客
大模型接口参数又多又杂,用单星 *args(按位置传,打包成元组)和双星 **kwargs(按名字传,打包成字典)就能灵活接收任意多个参数。例如 call_model("你好", 额外1, 额外2, top_p=0.9, max_tokens=512) 中,"额外1/额外2"被 *args 打包,"top_p/max_tokens"被 **kwargs 打包。
⑤ with 语句:自动帮你收尾的"魔法"
普通写法 f = open("data.json"); ...; f.close() 一旦忘记关或中间报错,文件没关会导致资源泄露。用 with open(...) as f: 则无论成功还是报错,离开缩进块文件一定被关闭,非常安全。更常见的是 with torch.no_grad():——PyTorch 推理时关闭梯度计算,省显存、跑得更快,几乎所有模型推理/生成代码都有它。
⑥ class 与 self:给数据和行为打包
把 class 比作"图纸",实例就是按图纸造出的"产品"。__init__ 初始化时把数据赋给 self.xxx,之后类里任何方法都能通过 self.xxx 访问——这正是后面手搓迷你 RAG 的骨架。
五、随堂小测(两题)
| | |
|---|
① call_model("你好",额外1,额外2,top_p=0.9,max_tokens=512) 中 **kwargs 打包什么? | | B:{"top_p":0.9,"max_tokens":512}(位置参数归 *args 打包成元组) |
with torch.no_grad() | | B:推理时关闭梯度计算,省显存、加速(A 错在"更慢") |
六、吃透 LMCC 真题:检索古诗词
这是 LMCC 第二轮真题的简化版,藏着 5 个知识点:默认参数、集合推导式、生成器表达式、字典/列表、lambda 排序键。核心流程:
def retrieve(problem, kb, top_k=3)- 集合推导式
text[i:i+2]:把干净文本切成一串「2 字词组」集合(去重); lambda
🧪 现场运行:问题"床前的月光让人思念" → 迷你知识库(静夜思 / 望庐山瀑布 / 春晓 / 登鹳雀楼)切 2 字词组对比后,输出静夜思、望庐山瀑布(默认 top_k=2,故连 0 分的也带出,体现需打分区分)。
随堂两题:Q-grams 那行写法属于集合推导式(C);两个集合间的 & 运算符表示交集(B)——求共同拥有的元素,这正是诗词比对"找重叠"的本质。
七、手搓迷你 RAG(把今日语法串起来)
不下载真实大模型,写一个"迷你检索器",思路与真题完全一致,正好用到:class+self、字典/集合推导式、lambda 排序、默认参数。三步:
八、Q&A 与学习建议
- 课件 / 代码下载:登录
lmcc.ccf.org.cn → 首页 → 青少年组 → 资料下载(含大纲、知识点、Python 相关资料与回放)。 - 信奥选手怎么学:C++ 功底转 Python 语法很简单,重点不是重学算法竞赛,而是培养"读懂大模型代码、会调 API 参数"的能力,多练 LMCC 第二轮代码填空题。
- 自学 Python:语法可自琢磨,但认证备考建议以官网题目/资料为主,自学吃力时找老师带。
- lambda 彩蛋:写 lambda 厉害的同学思维极适合电脑,老师身边这类人后来"去了美国创业,都做得很好"——值得交朋友。
九、第 3 讲速记卡
| | |
|---|
| | |
| top_k=3;f"..{x}.." 拼 prompt | |
| | |
| | |
| | |
| | |
| | |
✅ 核心方法论:LMCC 的 Python 难点不在算法,而在"认字"。遇到看不懂的推导式 / lambda / 生成器,翻译成最朴素的 for 循环写法就通了。读懂 AI 代码、会改参数,比会写算法更关键。
整理自李超老师《LMCC 涉及到的 Python 语言》直播逐字稿 · 内容忠实于原讲;现场口播的数值与运行结果为近似值,已按原话保留。