《2026 Python零基础入门:用AI主题学编程》第七课:高级函数 + lambda —— 批量处理提示词、简单函数式编程

4 阅读5分钟

大家好,我是链上杯子(CSDN:链上杯子)。

失业一年了,天天想着怎么翻身。最近批量弄提示词的时候,发现函数还能玩出更多花样。比如让函数接受“任意多个风格参数”,或者用一行小函数快速改一批提示词。这些写法一开始看不懂,但拆开学其实不难,用在 AI 上特别省事。

本课目标:学会函数的进阶写法,包括默认参数、可变参数(*args, **kwargs)、lambda 匿名函数,以及 map / filter / sorted 的常见用法。重点是理解这些工具怎么帮我们批量处理提示词列表。

核心代码实战

1. 默认参数 + 可变参数(*args, **kwargs)

默认参数:函数定义时可以给参数设默认值,调用时不传就用默认的。

可变参数:

  • *args:让函数能接收任意多个普通参数。Python 会把它们收集成一个元组(tuple),样子像列表,但用圆括号 ()

    例如:调用时传 "俏皮", "硬核", "文艺" 这三个参数,
    函数内部 *args 就变成:
    args = ("俏皮", "硬核", "文艺")

    你可以用 args[0] 拿到第一个值("俏皮"),
    也可以用 for style in args: 依次遍历每个值。

  • **kwargs:让函数能接收任意多个带名字的参数(键=值形式)。Python 会把它们收集成一个字典(dict)。

    例如:调用时传 tone="阴郁", ending="反转"
    函数内部 **kwargs 就变成:
    kwargs = {"tone": "阴郁", "ending": "反转"}

    你可以用 kwargs["tone"] 拿到 "阴郁",
    或者用 for key, value in kwargs.items(): 遍历每一对键和值。

def build_prompt(role, task, *styles, length=300, **extra):
    prompt = f"你是一个{role}。\n任务:{task}\n字数约{length}字。"
    
    if styles:
        prompt += "\n风格选项(任选其一或融合):" + " | ".join(styles)
    
    if extra:
        for key, value in extra.items():
            prompt += f"\n{key}{value}"
    
    return prompt

# 调用例子
p1 = build_prompt("创意文案师", "写5条产品 slogan", "俏皮", "硬核", "文艺")
print("p1:")
print(p1)

p2 = build_prompt("小说编辑", "续写一段悬疑故事", length=600, tone="阴郁", ending="反转")
print("\np2:")
print(p2)

运行后看到:

p1:
你是一个创意文案师。
任务:写5条产品 slogan
字数约300字。
风格选项(任选其一或融合):俏皮 | 硬核 | 文艺

p2:
你是一个小说编辑。
任务:续写一段悬疑故事
字数约600字。
tone:阴郁
ending:反转

2. lambda 匿名函数 + map —— 批量修改提示词

lambda:一种不需要起名字的简单小函数,常用于“只用一次”的小操作。写法是 lambda 参数: 表达式

例如:lambda x: x + 1 意思是“输入 x,返回 x+1”

map(函数, 列表):把函数依次应用到列表的每个元素上,返回一个新列表(通常转成 list() 看结果)。

prompt_templates = [
    "写一篇关于「{}」的短文",
    "生成3个「{}」相关的创意点子",
    "用诗的形式描述「{}」"
]

themes = ["AI 伴侣", "失落的城市", "深夜便利店"]

all_prompts = []
for template in prompt_templates:
    # lambda t: template.format(t) 意思:对每个 t(主题),把 template 里的 {} 替换成 t
    variants = list(map(lambda t: template.format(t), themes))
    all_prompts.extend(variants)

print("批量生成的提示词(共 {} 个):".format(len(all_prompts)))

# 用普通计数器代替 enumerate
count = 1
for p in all_prompts:
    print(f"{count}. {p}")
    count += 1

运行后看到(前几个):

批量生成的提示词(共 9 个):
1. 写一篇关于「AI 伴侣」的短文
2. 写一篇关于「失落的城市」的短文
3. 写一篇关于「深夜便利店」的短文
4. 生成3个「AI 伴侣」相关的创意点子
...

3. filter + sorted + lambda —— 筛选和排序提示词

filter(函数, 列表):只保留函数返回 True 的元素。

sorted(列表, key=函数):按函数返回的值排序。reverse=True 表示降序。

prompts = [
    {"text": "写一篇治愈系短文", "length": 400, "priority": 5},
    {"text": "生成硬核技术解释", "length": 800, "priority": 8},
    {"text": "脑暴10个搞笑文案", "length": 200, "priority": 3},
    {"text": "写长篇科幻故事", "length": 1500, "priority": 7},
]

# filter + lambda:只保留 length <= 600 的
short_prompts = list(filter(lambda p: p["length"] <= 600, prompts))

# sorted + lambda:按 priority 从高到低排
sorted_prompts = sorted(short_prompts, key=lambda p: p["priority"], reverse=True)

print("筛选并排序后的短提示词(优先级高→低):")
for p in sorted_prompts:
    print(f"- {p['text']} ({p['length']}字, 优先级 {p['priority']})")

运行后:

- 写一篇治愈系短文 (400字, 优先级 5)
- 脑暴10个搞笑文案 (200字, 优先级 3)

小练习(2 道)

练习1(基础)
定义函数 make_variants(base_prompt, *suffixes),用 *args 接收多个后缀,为基础提示词分别加上每个后缀,生成列表并返回。
调用时传 3–4 个后缀,打印结果。

练习2(进阶)
准备 6–10 个提示词字典列表(含 "text"、"length"、"style")。

  1. 用 filter + lambda 选 length <= 500 的
  2. 用 map + lambda 在每个 text 前加“紧急:”
  3. 用 sorted + lambda 按 style 字母顺序排
  4. 打印处理后的列表,并复制 1 个到大模型试试。

本课小结

本课重点讲解了默认参数、可变参数(*args 收集成元组,**kwargs 收集成字典)、lambda 匿名函数、map(批量应用)、filter(筛选)、sorted(排序)。
这些在批量处理提示词变体时特别实用,能让代码更短、更灵活。

下节预告

下一课:模块与文件操作 —— 保存/读取对话历史(txt/json),让你的 AI 聊天记录持久化。

欢迎在评论区贴出练习代码或生成的提示词,有问题可以留言。