01
函数与代码组织 · 5 / 6
1.5 lambda 表达式
💡 推理服务里很多"一次性小函数"——按长度截断、按规则过滤、给 key 排序
1.5 lambda 表达式
lambda = 一行函数的语法糖
add = lambda a, b: a + b
print(add(2, 3)) # 5
等价于:
def add(a, b):
return a + b
为什么推理代码里常用
很多场景要传一个“小函数”作为参数(回调、key 函数、过滤器)。比如按 token 数排序推理请求:
requests.sort(key=lambda r: r["token_count"])
这里的 key= 必须是一个函数,lambda 写一行就够。
注意事项
- 只能写一个表达式,不能写
if / for / return这些语句(除非用三元) - 适合简单逻辑,复杂逻辑请用
def
示范
# 1. 按 token 数排序
batches = [{"id": "a", "n": 128}, {"id": "b", "n": 32}, {"id": "c", "n": 64}]
batches.sort(key=lambda x: x["n"])
print(batches) # 按 n 从小到大
# 2. 过滤掉空 prompt
prompts = ["hi", "", "hello", " "]
non_empty = list(filter(lambda p: p.strip() != "", prompts))
print(non_empty)
# 3. 三元表达式(lambda 里也能用)
label = lambda n: "long" if n > 100 else "short"
print(label(50), label(200))
✍️ 练习
有一个请求列表:
reqs = [
{"id": 1, "prompt": "hi"},
{"id": 2, "prompt": "Tell me a long story about dragons and knights"},
{"id": 3, "prompt": "1+1=?"},
{"id": 4, "prompt": "Explain quantum computing"},
]
用 sorted + lambda,按 prompt 长度从大到小排序,把排序后的列表打印出来。
💡 思路提示
点开看提示
sorted(..., key=...)里的key是一个函数,输入每个元素,输出用来比较的“键”- 要按长度从大到小,可以
key=lambda r: len(r["prompt"]),再传reverse=True - 或者
key=lambda r: -len(r["prompt"])(取负号实现倒序)
✅ 参考解法
写不出来再打开
reqs = [
{"id": 1, "prompt": "hi"},
{"id": 2, "prompt": "Tell me a long story about dragons and knights"},
{"id": 3, "prompt": "1+1=?"},
{"id": 4, "prompt": "Explain quantum computing"},
]
ordered = sorted(reqs, key=lambda r: len(r["prompt"]), reverse=True)
print(ordered)
🔍 进阶思考
sorted 和 list.sort 的区别:
sorted返回新列表list.sort在原列表上原地改,不返回值
框架代码里 list.sort() 比 sorted(list) 更省内存——但当原列表不能动时只能用 sorted。