当前位置:首页>python>3.《LMCC涉及到的Python语言》

3.《LMCC涉及到的Python语言》

  • 2026-09-10 11:13:05
3.《LMCC涉及到的Python语言》
本文由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 语句、类的写法。今天目标:把这些面生的写法扫一遍,再拿真题练手,做到看到类似代码"一看就懂"。

今天讲什么 · 四大模块① 语法快速体验变量/数据类型/条件循环/函数② AI 代码高频写法推导式/lambda/args/with/class③ 吃透 LMCC 真题代码检索古诗词 · 随堂小测④ 手搓迷你 RAG把今日语法串成小检索器🎯 为什么考 Python:调用大模型 API → 读懂 / 填空 / 改参数(不再是手写算法)

三、Python 语法快速体检

1. 变量与数据类型(不用声明,一切皆对象)

和 C++ 不同,Python 不用声明类型——把 10 赋给 x,x 就是整型;后面还能变成字符串。数字、字符串、函数、类本质上都是对象,都能赋值给变量、当参数传递。社区非常看重可读性,所以才有了推导式、with 这类"让代码更短更清楚"的写法。

数据类型「括号记忆法」列表 list [ ]中括号;可增删改;最常用例:["苹果","香蕉"]字典 dict { }大括号 + 冒号 键值对 key:value例:{"作者":"李白"}集合 set { }大括号 无冒号;自动去重例:{"床前","月光"}元组 tuple ( )小括号;创建后不可变例:("a","b","c")

2. 条件与循环(缩进是唯一分块方式)

Python 不用大括号,靠缩进表示"谁属于谁",缩进错了直接报错——这是新手最容易犯的错(C++ 缩进无所谓)。

  • if / elif / else
    :冒号后换行,下一行必须缩进;
  • for 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),更省内存、适合只用一次。

推导式「四兄弟」· 看括号认写法列表推导式 [ ][x for x in a if ...]字典推导式 { k:v }{id: score for ...}集合推导式 { x }(无冒号)去重;切词组常用生成器表达式 ( x )小括号;更省内存集合推导式实战:text[i:i+2] 把文本切成「2 字词组」集合,用于诗词相似度对比例:「床前明月光」→ {"床前","前明","明月","月光"}

③ 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 打包。

*args 与 **kwargs 怎么打包call_model("你好",额外1, 额外2,top_p=0.9, max_tokens=512)函数内部拆包*args → ("额外1","额外2")  (按位置·元组)**kwargs → {"top_p":0.9,  "max_tokens":512}  (按名字·字典)

⑤ with 语句:自动帮你收尾的"魔法"

普通写法 f = open("data.json"); ...; f.close() 一旦忘记关或中间报错,文件没关会导致资源泄露。用 with open(...) as f: 则无论成功还是报错,离开缩进块文件一定被关闭,非常安全。更常见的是 with torch.no_grad():——PyTorch 推理时关闭梯度计算,省显存、跑得更快,几乎所有模型推理/生成代码都有它。

with 语句的两大魔法① 文件自动关闭with open("x.json") as f:离开代码块 → 必定 close忘关 / 报错也不怕泄露② torch.no_grad()with torch.no_grad():推理时关闭梯度计算→ 省显存 · 加速

⑥ class 与 self:给数据和行为打包

把 class 比作"图纸",实例就是按图纸造出的"产品"。__init__ 初始化时把数据赋给 self.xxx,之后类里任何方法都能通过 self.xxx 访问——这正是后面手搓迷你 RAG 的骨架。

五、随堂小测(两题)

题
考点
正确答案
① call_model("你好",额外1,额外2,top_p=0.9,max_tokens=512) 中 **kwargs 打包什么?
*args / **kwargs
B
:{"top_p":0.9,"max_tokens":512}(位置参数归 *args 打包成元组)
with torch.no_grad()
 的核心作用?
with 语句
B
:推理时关闭梯度计算,省显存、加速(A 错在"更慢")

六、吃透 LMCC 真题:检索古诗词

这是 LMCC 第二轮真题的简化版,藏着 5 个知识点:默认参数、集合推导式、生成器表达式、字典/列表、lambda 排序键。核心流程:

  1. def retrieve(problem, kb, top_k=3)
    :默认返回最相关 3 首;
  2. 正则清洗:去掉问题里的逗号、句号、问号、感叹号;
  3. 集合推导式 text[i:i+2]:把干净文本切成一串「2 字词组」集合(去重);
  4. 与知识库每首诗求交集打分(重叠越长分越高);
  5. lambda
     按分数从大到小排序,取前 top_k。

🧪 现场运行:问题"床前的月光让人思念" → 迷你知识库(静夜思 / 望庐山瀑布 / 春晓 / 登鹳雀楼)切 2 字词组对比后,输出静夜思、望庐山瀑布(默认 top_k=2,故连 0 分的也带出,体现需打分区分)。

随堂两题:Q-grams 那行写法属于集合推导式(C);两个集合间的 & 运算符表示交集(B)——求共同拥有的元素,这正是诗词比对"找重叠"的本质。

七、手搓迷你 RAG(把今日语法串起来)

不下载真实大模型,写一个"迷你检索器",思路与真题完全一致,正好用到:class+self、字典/集合推导式、lambda 排序、默认参数。三步:

迷你 RAG / 古诗词检索流程问题文本"床前明月光"正则清洗去标点切 2 字词组集合推导式与库求交集打分lambda 排序分数从高到低取 top_k输出最相关运行示例:按 2 词组打分=5(最相关),按 3 词组打分=3;输出 2 条时第 2 条可能为 0 分

八、Q&A 与学习建议

  • 课件 / 代码下载
    :登录 lmcc.ccf.org.cn → 首页 → 青少年组 → 资料下载(含大纲、知识点、Python 相关资料与回放)。
  • 信奥选手怎么学
    :C++ 功底转 Python 语法很简单,重点不是重学算法竞赛,而是培养"读懂大模型代码、会调 API 参数"的能力,多练 LMCC 第二轮代码填空题。
  • 自学 Python
    :语法可自琢磨,但认证备考建议以官网题目/资料为主,自学吃力时找老师带。
  • lambda 彩蛋
    :写 lambda 厉害的同学思维极适合电脑,老师身边这类人后来"去了美国创业,都做得很好"——值得交朋友。

九、第 3 讲速记卡

知识点
必会
易错点
缩进分块
无大括号,缩进定归属
缩进错=报错(C++ 无所谓)
默认参数 / f-string
top_k=3;f"..{x}.." 拼 prompt
f-string 是构造 prompt 必用
推导式四兄弟
列表[]/字典{k:v}/集合{x}/生成器()
字典有冒号、集合无冒号
lambda
sort/max 的 key 匿名函数
看不懂就还原成普通函数
*args/**kwargs
位置→元组 / 名字→字典
调用 API 参数又多又杂时
with 语句
自动收尾;no_grad 省显存
忘记 close 会资源泄露
class / self
图纸与实例;self 存数据
类内方法要 self. 调用

✅ 核心方法论:LMCC 的 Python 难点不在算法,而在"认字"。遇到看不懂的推导式 / lambda / 生成器,翻译成最朴素的 for 循环写法就通了。读懂 AI 代码、会改参数,比会写算法更关键。

整理自李超老师《LMCC 涉及到的 Python 语言》直播逐字稿 · 内容忠实于原讲;现场口播的数值与运行结果为近似值,已按原话保留。

交流群,失效联系:wswrlm
1

最新文章

随机文章