当前位置:首页>python>第四课:Python 速成 —— 看懂 Agent 代码的最小必备

第四课:Python 速成 —— 看懂 Agent 代码的最小必备

  • 2026-10-11 07:13:12
第四课:Python 速成 —— 看懂 Agent 代码的最小必备

🎯 这一课要达成什么:补上一块关键的"过渡台阶"。前三课我们一行代码都没正式写过,但从下一课开始要读懂、修改真正的 Agent 代码了。这一课专门教你恰好够用的 Python——不多不少,刚好让你翻开第五课时每一行都看得懂。

⏱ 预计学习时间:6–10 小时(边读边在电脑上敲,比只看效果好十倍)

📌 难度:⭐⭐☆☆☆(零基础友好,但这一课务必动手敲,不能只用眼睛看)

🧩 前置要求:完成第一课(环境已配好)+ 第二、三课(理解 Agent 概念与提示工程)。


写在最前面:为什么突然插进来一节"学 Python"?

你可能发现了一个落差:

  • • 第二、三课:全是概念和在网页上跟 AI 聊天,标注着"不需要编程基础",跟得很轻松。
  • • 下一课(第五课):难度一下跳到 ⭐⭐⭐,开头就要你"实现第一个真正能运行的 ReAct Agent",满屏代码。

中间这道坎,如果没人扶一把,很多人就在这里放弃了——不是因为笨,而是没人把"从看不懂代码到看得懂代码"这一步铺平。

这一课就是那块台阶。我不会教你完整的 Python(那要几个月,也偏离我们的主线)。我只教后面几课 Agent 代码里真正会用到的那几样东西,而且每讲一个语法,都直接告诉你"它在 Agent 代码里长什么样、是干嘛的"。

💡 学习方式很重要:这一课一定要打开电脑、亲手敲。看代码就像看别人游泳,自己不下水永远学不会。用第一课建好的环境,新建一个 learn.py 文件,边读边把例子敲进去运行。

🗺 这一课在课程地图里的位置:第二课讲过 Agent 由"大脑/记忆/工具箱/规划"四件套组成。这一课不属于其中任何一件,它是实现这四件套的基本工具——就像盖房子前要先备好锤子、锯子、卷尺。备齐了它们,下一课才能动手开工。


目录

  1. 1. 先看一眼"终点":下一课的代码长什么样
  2. 2. 变量:给数据起个名字
  3. 3. 字符串与 f-string:处理文字
  4. 4. 列表与字典:装东西的两种容器
  5. 5. 条件判断:让程序会"选择"
  6. 6. 循环:让程序会"重复"
  7. 7. 函数:把一段本领打包命名
  8. 8. import:借用别人写好的工具
  9. 9. try/except:优雅地处理出错
  10. 10. 回到"终点":现在我们逐行读懂下一课的代码
  11. 11. 课后作业
  12. 12. 常见问题解答

1. 先看一眼"终点":下一课的代码长什么样

我们先把第五课一开头会出现的真实代码摆出来。现在看不懂完全正常——这正是这一课要解决的。把它当成"通关目标",学完第 9 节再回来,你会发现每一行都懂了。

def search_web(query: str) -> str:
    """模拟网络搜索工具"""

    mock_results = {
        "北京天气"
: "北京今日:晴,气温 22°C,微风",
        "python"
: "Python 是一种简单易学的编程语言",
    }
    for
 key, value in mock_results.items():
        if
 key in query:
            return
 value
    return
 f"搜索结果:关于'{query}'找到了一些相关信息"

数一数,这短短几行就用到了:函数(def)、参数、字典、for 循环、if 判断、in、return、f-string。这一课我们就一个一个把它们拿下。


2. 变量:给数据起个名字

一句话理解:变量就是给一个数据贴个标签,方便以后反复用它。

name = "小明"          # 把"小明"这段文字,贴上 name 这个标签
age = 25              # 把数字 25 贴上 age 标签
price = 19.9          # 小数也行
is_done = True        # True / False 表示"是/否",叫布尔值

print
(name)           # 屏幕显示:小明
print
(age + 1)        # 屏幕显示:26(变量可以参与运算)

💡 它在 Agent 代码里:你会看到 client = Anthropic(...)、goal = "调研最流行的编程语言" 这样的写法,就是把"AI 客户端""任务目标"这些东西贴上标签,后面好反复使用。

三种最常见的数据类型

类型
英文
例子
是什么
字符串
string / str
"你好"
一段文字,要用引号括起来
整数
integer / int
25
整数,不带引号
小数
float
19.9
带小数点的数
布尔值
boolean / bool
True
 / False
真 / 假,只有这两个值

3. 字符串与 f-string:处理文字

AI 程序的本质就是"处理文字"——你发文字给 AI,AI 回文字给你。所以字符串是 Agent 代码里最常见的东西。

greeting = "你好"
target = "世界"

# 把两段文字拼起来(用加号)

message = greeting + "," + target      # 结果:"你好,世界"

🌟 f-string:往文字里"塞变量"(重点中的重点)

经常你想说"你好,{某个名字}",这个名字是个变量。用 f-string 最方便——在引号前加个 f,然后把变量用 {} 包起来塞进去:

name = "小明"
score = 95

# 注意引号前的 f

result = f"同学 {name} 这次考了 {score} 分"
print
(result)        # 屏幕显示:同学 小明 这次考了 95 分

💡 它在 Agent 代码里随处可见:比如 return f"搜索结果:关于'{query}'找到了信息",就是把用户搜的关键词 query 塞进一句回复里。你在第一课的迷你 Agent 里也见过 f"第 {round_num} 轮思考"。f-string 是你必须形成肌肉记忆的语法。


4. 列表与字典:装东西的两种容器

当你有"一堆"数据要装,Python 给了两种最常用的容器。

📋 列表(list):一排带编号的格子

一句话理解:列表就是一排有顺序的格子,用方括号 [],靠"第几个"来取。

fruits = ["苹果", "香蕉", "橙子"]    # 一个装了 3 样水果的列表

print
(fruits[0])      # 苹果(注意!编号从 0 开始,不是 1)
print
(fruits[1])      # 香蕉
print
(len(fruits))    # 3(len 告诉你列表里有几个)

fruits.append("葡萄") # 在末尾再加一个

⚠️ 新手必踩的坑:编号(叫"索引")从 0 开始。第一个是 [0],第二个是 [1]。这就是为什么 Agent 代码里取 AI 回复要写 message.content[0]——取的是"第 0 个",也就是第一个。

💡 它在 Agent 代码里:messages=[{...}, {...}] 就是一个列表,里面按顺序装着你和 AI 的多轮对话。第一课让 AI 记住上文,靠的就是往这个列表里不断 append 新对话。

🗂 字典(dict):贴了标签的储物柜

一句话理解:字典用大括号 {},不靠"第几个",而靠"名字"(叫 key,键)来取东西。就像储物柜,你靠柜子上的名字找,而不是数第几个。

person = {
    "name"
: "小明",     # "name" 是键(key),"小明" 是值(value)
    "age"
: 25,
    "city"
: "北京"
}

print
(person["name"])   # 小明(用键来取值,括号里写键的名字)
print
(person["age"])    # 25

person["job"] = "程序员"  # 新增一对

💡 它在 Agent 代码里极其重要:你发给 AI 的每条消息都是个字典——{"role": "user", "content": "你好"},role 这个键说明"谁说的",content 这个键放具体内容。下一课那个 mock_results 也是字典:键是"搜索词",值是"搜索结果"。

列表套字典:最常见的组合

Agent 代码里,"多轮对话"长这样——一个列表,里面装着多个字典:

messages = [
    {"role": "user", "content": "世界最高峰是?"},
    {"role": "assistant", "content": "珠穆朗玛峰"},
    {"role": "user", "content": "那第二高呢?"}
]
# messages[0] 取出第一个字典;messages[0]["content"] 取出它的内容

看懂这个结构,你就看懂了 80% 的 Agent 对话代码。


5. 条件判断:让程序会"选择"

一句话理解:if 让程序根据情况走不同的路,就像"如果下雨就带伞,否则不带"。

score = 85

if
 score >= 90:
    print
("优秀")
elif
 score >= 60:        # elif = else if,再判断一个条件
    print
("及格")
else
:
    print
("不及格")
# 这段会输出:及格

⚠️ Python 靠"缩进"分组:if 下面那行前面的空格(通常 4 个)不是装饰,是语法!它表示"这行属于 if 管的"。缩进错了程序就报错。这是 Python 和别的语言很不一样的地方,新手一定要注意。

常用的判断符号

写法
意思
==
相等(两个等号,一个等号是赋值!)
!=
不相等
><>=<=
大于、小于、大于等于、小于等于
in
包含 / 在里面

💡 它在 Agent 代码里:if key in query: 意思是"如果搜索词里包含这个关键字"。in 在 Agent 代码里很常用,用来检查"某个东西在不在某段文字 / 某个列表里"。


6. 循环:让程序会"重复"

还记得第二课讲的 Agent "感知-思考-行动-观察"循环吗?那个"循环"在代码里就是用 for 或 while 实现的。

🔁 for 循环:把一堆东西挨个处理一遍

fruits = ["苹果", "香蕉", "橙子"]

for
 fruit in fruits:        # 把 fruits 里的每个东西,轮流叫做 fruit
    print
(f"我喜欢吃{fruit}")
# 会依次输出:我喜欢吃苹果 / 我喜欢吃香蕉 / 我喜欢吃橙子

遍历字典(Agent 代码里常见)用 .items(),一次拿到键和值:

person = {"name": "小明", "age": 25}

for
 key, value in person.items():
    print
(f"{key} 是 {value}")
# 输出:name 是 小明 / age 是 25

💡 它在 Agent 代码里:下一课那段 for key, value in mock_results.items(): 就是"把模拟搜索结果里的每一对都翻一遍,看哪个匹配"。

🔢 想重复固定次数:range

for i in range(3):          # range(3) 产生 0, 1, 2
    print
(f"第 {i} 次")

💡 你在第一课的迷你 Agent 里见过 for round_num in range(1, 4):,就是让它思考第 1、2、3 轮。


7. 函数:把一段本领打包命名

一句话理解:函数就是把"一段会做某件事的代码"打包,起个名字,以后想用直接喊名字,不用重写。就像把"泡面步骤"打包成"泡面"这个动作,以后说"泡面"就行。

# 定义一个函数:用 def 开头
def
 greet(name):              # name 是"输入"(叫参数)
    return
 f"你好,{name}!"   # return 是"输出"(把结果交回去)

# 使用(调用)它

message = greet("小明")        # 把"小明"作为输入传进去
print
(message)                # 你好,小明!

看懂带类型标注的函数(下一课的写法)

下一课的函数写得更"正式"一点,多了 : str 和 -> str:

def search_web(query: str) -> str:
    return
 f"搜索了:{query}"

逐块翻译:

  • • def search_web → 定义一个叫 search_web 的函数
  • • (query: str) → 它需要一个输入 query,: str 是提示这个输入应该是字符串(提示而已,不强制)
  • • -> str → 提示这个函数会返回一个字符串
  • • 中间的 """...""" → 三引号包起来的是文档字符串,给人看的说明,对程序运行无影响

💡 为什么要打类型标注? 纯粹是为了让代码更好读、工具能帮你检查。对你现在来说,看到 : str、-> str 知道"哦这是在说输入输出大概是什么类型"就够了,不用纠结。

🤯 一个会让新手震惊的点:在 Python 里,函数本身也能当数据存进字典。下一课会有个 TOOLS = {"search_web": {"function": search_web, ...}} 的写法,就是把 search_web 这个函数当成值存了起来(注意没加括号,加括号是"调用",不加是"把函数本身交出去")。这是 Agent 工具箱机制(回忆第二课四件套之一)的核心技巧,后面讲工具使用和函数调用时会反复用到。现在知道"函数能被存起来、传来传去"即可。


8. import:借用别人写好的工具

一句话理解:你不用什么都自己造。import 就是"把别人写好的工具搬进来用"。

import os                          # 搬进来整个 os 工具箱
from
 datetime import datetime      # 只从 datetime 工具箱里拿 datetime 这一件
from
 anthropic import Anthropic    # 从 anthropic 包里拿 Anthropic 这个工具
from
 openai import OpenAI          # 从 openai 包里拿 OpenAI 这个工具(DeepSeek 用这个)

💡 它在 Agent 代码里:每个 Agent 文件开头那几行 import,就是在把要用的工具(读环境变量的 os、调用 AI 的 anthropic 或 openai、处理时间的 datetime 等)先搬上桌。你在第一课已经见过、也亲手用过了。


9. try/except:优雅地处理出错

一句话理解:有些操作可能会失败(比如算一个非法的式子、网络断了)。try/except 让程序"试一下,万一出错了别崩溃,改走另一条路"。

try:
    result = 10 / 0          # 除以 0 会出错
    print
(result)
except
 Exception as e:        # 万一出错,就跑到这里来
    print
(f"出错了:{e}")
# 程序不会崩溃,而是输出:出错了:division by zero

💡 它在 Agent 代码里很常见:调用 AI、调用工具、算表达式都可能失败。下一课的计算器工具会用 try/except 包住 eval(expression),就是"算一下,算不出来就返回一句友好的错误提示,而不是让整个 Agent 崩掉"。一个健壮的 Agent,必然到处是 try/except。


10. 回到"终点":现在我们逐行读懂下一课的代码

学完上面 8 样,我们回到第 1 节那段"看不懂"的代码。现在逐行拆,你会发现全懂了:

def search_web(query: str) -> str:        # ① 定义函数,输入一个字符串 query,返回字符串
    """模拟网络搜索工具"""
                  # ② 文档字符串,给人看的说明
    mock_results = {                       # ③ 一个字典:键是搜索词,值是结果
        "北京天气"
: "北京今日:晴,气温 22°C",
        "python"
: "Python 是一种编程语言",
    }
    for
 key, value in mock_results.items():# ④ for 循环,把字典每一对都翻一遍
        if
 key in query:                   # ⑤ if 判断:如果搜索词里包含这个键
            return
 value                   # ⑥ 就返回对应的值,函数结束
    return
 f"关于'{query}'没找到精确结果"    # ⑦ 都没匹配上,返回一句 f-string 兜底

读懂了吗?这就是这一课的成果——你已经能看懂真实的 Agent 工具代码了。 下一课满屏的代码,骨架都是这八样东西的组合。

🎯 关键心态:你不需要能"凭空默写"出这些代码,能"读懂"和"照着改"就足够开始下一课了。写代码的熟练度是跟着后面几课敲出来的,不是这一课就要练成的。


11. 课后作业

这一课作业必须在电脑上实际运行,不能只看。新建一个 learn.py,把每题的代码敲进去跑。

✅ 必做任务

  • •任务 1:创建一个字典,存你自己的信息(名字、年龄、城市),然后用 f-string 打印成一句话:"我叫 X,今年 X 岁,住在 X"
  • •任务 2:创建一个列表,装 5 个你喜欢的食物,用 for 循环逐个打印"我喜欢吃 X"
  • •任务 3:照着第 10 节的 search_web 函数,自己手敲一遍(不要复制),改成你自己的几个关键词和结果,然后调用它试几个不同的查询
  • •任务 4:写一个函数 is_pass(score),输入分数,用 if/else 返回"及格"或"不及格"

📝 理解题(不用写代码,用自己的话回答)

  1. 1. 列表用 []、靠编号取;字典用 {}、靠键取。各举一个"用列表更合适"和"用字典更合适"的生活例子。
  2. 2. message.content[0] 里的 [0] 为什么是取"第一个"而不是"第零个"?
  3. 3. 函数里的 return 和 print 有什么不一样?(提示:一个是"把结果交回去给程序继续用",一个是"显示给人看")

🌟 选做任务(想多练的同学)

  • •

    把第一课的 mini_agent.py 代码重新读一遍,这次试着说出每一行用到了这一课学的哪个知识点(变量?f-string?列表?字典?for?……)。这个练习能让你直观感受"概念→代码"是怎么一一对应的。

  • •

    写一个简单的"工具注册表"字典,仿照下一课会出现的 TOOLS 结构,把你任务 3、4 写的两个函数都登记进去(体会"把函数当值存进字典"):

    TOOLS = {    "search_web": {"function": search_web, "description": "模拟搜索"},    "is_pass":    {"function": is_pass,    "description": "判断及格"},}# 然后试试:TOOLS["is_pass"]["function"](85)

12. 常见问题解答(踩坑急救站)

Q:我必须把这些语法全背下来才能学下一课吗?

A:完全不用背!目标是能读懂、能照着改,不是默写。就像看菜谱做菜,你不需要背下菜谱,能看懂、能跟着做就行。语法的熟练度会在后面几课不断敲代码的过程里自然长出来。


Q:代码报错了,提示一堆英文,怎么办?

A:报错是学编程的日常,不是你做错了。三个办法:(1) 仔细看报错的最后一行,通常最关键;(2) 重点检查缩进(空格对齐)和引号、括号有没有配对,这是新手 90% 的错误来源;(3) 把报错信息直接复制给 AI(Claude/DeepSeek)问"这是什么意思、怎么改"——这其实是真实开发者每天都在做的事。


Q:为什么 Python 这么在意缩进(前面的空格)?

A:别的很多语言用大括号 {} 来分组,Python 选择用缩进来分组,让代码看起来更清爽。代价就是缩进变成了语法的一部分,不能随便加减空格。建议统一用 4 个空格(大多数编辑器按一下 Tab 键会自动变成 4 个空格)。


Q:我是文科生 / 数学不好,能学会编程吗?

A:能。编程和数学好不好关系不大,更像学一门"和电脑沟通的语言"——有它的语法规则,多用就熟。我们这门课用到的数学几乎为零。你已经走到这里,说明完全有能力继续。


Q:这一课学的够用吗?后面会不会还有看不懂的语法?

A:这一课覆盖了 Agent 代码 80% 以上的常见语法,足够你顺利进入第五课起的后续几课。偶尔遇到新语法(比如类 class、装饰器)时,相关课会现场讲解,或者你随手问 AI 即可。不用担心"没学全",编程本来就是用到再查、边做边学。


这一课小结

这一课拿下了(看懂 Agent 代码的最小必备):
✅ 变量 —— 给数据贴标签
✅ 字符串 & f-string —— 处理文字、往文字里塞变量
✅ 列表 [] & 字典 {} —— 两种装东西的容器(重点!对话就是"列表套字典")
✅ if 条件判断 —— 让程序会选择(注意缩进!)
✅ for/while 循环 —— 让程序会重复(Agent 循环的代码本体)
✅ 函数 def —— 把本领打包命名(还能当值存进字典!)
✅ import —— 借用别人写好的工具
✅ try/except —— 优雅地处理出错

最重要的收获:
🌟 你现在能"读懂并修改"真实的 Agent 代码了。
   不求默写,但求看懂——这就足够迈进下一课。

下一课预告:
🔜 第五课:Agent 推理模式(ReAct)
   —— 现在你能看懂代码了,我们来实现第一个
      真正能运行、会"边想边做"的 ReAct Agent!
   —— 第二课讲的"感知-思考-行动-观察"循环,
      这一课终于要从概念变成你电脑上跑起来的真代码了。

📬 完成这一课作业后,把你手敲的 search_web 函数发我看看,再告诉我哪个语法点之前最绕、现在通了没——确认你真的站稳了这块台阶,我们再上第五课!

最新文章

随机文章