最近一边啃 Python 基础,一边上手做 Agent 开发。过程中发现,很多看似零散的语法点,实际上在写 Agent 的时候频频出场。于是就一个个记了下来,现在正好串成一条线,分享出来。
1. 类(class):不是玄学,就是个"标签"
很多新手被"面向对象"四个字吓住。其实类说白了就是给对象贴标签——告诉 Python:"这个家伙是这一类,所以它天然拥有这些属性和方法"。
现实世界中,哺乳动物会产奶,鸟会下蛋——这是归纳出来的。Python 里的区别在于:你先定义一个类,然后期待同一类的对象都具备某些行为。
class MyClass: i = 12345 def f(self): return 'hello world'x = MyClass()print(x.i) # 12345print(x.f()) # hello world
Agent 开发中怎么用? 后面会讲到的自定义异常、装饰器,都建立在类与函数的基础之上。
2. try:优雅地处理意外
和 if-else 类似,try-except 用来"预见不测"。finally 里的代码无论如何都会执行——关闭文件、释放连接这些操作,很适合放在里面。
try: risky_operation()except ValueError as e: print(f"值出错了:{e}")except (TypeError, KeyError): print("类型或键出错")else: print("一切正常")finally: print("无论如何我都会执行")
还可以用 raise 主动触发异常测试逻辑,甚至自定义异常类(这时候第 1 点的 class 就派上用场了):
class NetworkError(RuntimeError): passraise NetworkError("连接超时")
3. all():一键判断"全员合格"
all() 判断可迭代对象里的元素是否全部为真。元素除了 0、空、None、False 之外都算 True。
all([True, 1, "hello"]) # Trueall([True, 0, "hello"]) # Falseall([]) # True(空的可迭代对象默认返回 True)
Agent 中经常用它做前置校验:"所有必需的 API 密钥都配好了吗?都配好了才往下走。"
4. join():比 + 号优雅的字符串拼接
用指定字符把序列里的每个元素串起来:
symbol = "-"seq = "hello"print(symbol.join(seq)) # h-e-l-l-owords = ["Agent", "开发", "实战"]print(" | ".join(words)) # Agent | 开发 | 实战
拼接多个字符串时,join() 比 + 可读性更好,性能也更优。
5. os.getenv():安全读取环境变量
写 Agent 必备技能——API Key、Base URL 这类敏感信息,不能直接写死在代码里。os.getenv() 从环境变量中读取,读不到还能设默认值:
import osapi_key = os.getenv('ARK_API_KEY', 'fallback_key')
6. os.environ:环境变量的"字典"视角
os.environ 本质上是一个字典对象,支持读取、设置、删除:
import osprint(os.environ["HOME"]) # 读取os.environ["MY_KEY"] = "value" # 设置del os.environ["MY_KEY"] # 删除
7. os.environ vs os.getenv():一个核心区别
一句话总结:需要取值并兜底,用 getenv();需要像字典一样增删改查,用 environ。
8. 装饰器:不动原代码,悄悄加功能
装饰器是一个接收函数、内部定义子函数、最终返回函数的高阶函数。它最大的价值:不改原函数一行代码,就能增加前置/后置处理。
def decorator_function(original_function): def wrapper(*args, **kwargs): print("执行前") original_function(*args, **kwargs) print("执行后") return wrapper@decorator_functiondef target_function(): print("Hello!")target_function()# 执行前# Hello!# 执行后
日志记录、权限校验、性能计时……这些横切关注点几乎都能用装饰器干净地抽离出来。