写下 Go小技巧&易错点100例 的时候,我其实没有想过它会变成一个长期陪伴自己的系列。
一开始只是很朴素的想法:把平时开发里踩过的坑、查过的问题、突然想明白的小细节记下来。Go 语言很直接,也很克制,很多问题一旦理解了,就会变成肌肉记忆。比如 slice 的扩容、map 的并发安全、defer 的执行时机、goroutine 的退出控制、context 的传递边界,这些点看起来都不大,但在真实项目里,每一个都可能让人多调半天。
后来慢慢发现,所谓“小技巧”和“易错点”,其实不是边角料。它们更像是程序员和一门语言真正熟起来的证据。
刚开始学习一门语言时,我们总会先问:语法怎么写?项目怎么跑?库怎么用?
但真正进入日常开发之后,我们问的问题会变成:为什么这里会这样?为什么我以为的写法不工作?为什么同样的代码在另一个环境里就出错?为什么这个坑我已经踩过一次,换个场景又踩了一遍?
这些问题细碎、具体、甚至有点狼狈,却最接近真实的成长。
从Go到Python,不是告别,而是扩展
过去很长一段时间里,Go 是我在后端工程里非常顺手的工具。它简单、明确、工程化能力强,适合构建服务、处理中间件、写网络程序,也适合在复杂系统里保持秩序感。
但到了 AI 时代,开发工作的重心开始发生变化。
我们不再只是写接口、连数据库、做并发控制,也开始频繁地处理模型调用、Prompt 组织、结构化输出、Embedding、RAG、Agent、异步任务、数据清洗、批量评测和实验脚本。很多时候,一个想法能不能快速验证,不取决于服务框架搭得多漂亮,而取决于你能不能用最短的路径把数据、模型和业务流程串起来。
这时 Python 就很自然地走到了面前。
Python 不是因为语法更短才重要,也不是因为它适合写脚本才重要。它真正重要的地方在于:它站在了 AI 生态的中心。
从数据处理到模型训练,从推理服务到自动化评测,从 Notebook 实验到生产环境脚本,大量工具、框架、SDK 和最佳实践都首先在 Python 里生长出来。你可以不把 Python 当作唯一的主语言,但如果你正在开发 AI 项目,就很难绕开它。
对我来说,这不是从 Go 转向 Python 的单选题,而是在已有工程经验上,补上一块新的能力版图。
Go 让我更重视工程边界、并发模型和长期可维护性;Python 则提醒我,在 AI 项目里,快速实验、灵活组合、生态调用和数据表达同样重要。
这两种能力并不冲突。它们像两种不同性格的工具:一个稳,一个快;一个强调结构,一个擅长探索。真正重要的不是站队,而是在不同场景里知道该如何选择。
Python看起来简单,但并不随便
很多人第一次写 Python,会觉得它非常亲切。
没有繁琐的类型声明,没有复杂的编译流程,写几行代码就能跑起来。读取文件、处理 JSON、调用 HTTP 接口、写个小工具,几乎都可以很快完成。
但 Python 的坑也藏在这种轻松感里。
变量可以随时指向不同类型,于是代码写着写着就失去了语义;列表和字典是可变对象,一个赋值不小心就共享了同一份数据;默认参数只初始化一次,函数调用之间悄悄互相影响;异常被 except Exception: pass 吞掉之后,程序表面平静,问题却在更远的地方冒出来;虚拟环境没隔离好,一个项目装包,另一个项目崩掉;异步代码看起来用了 async,实际却还是阻塞执行。
这些问题并不丢人。它们是进入一门语言时必经的摩擦。
就像当年学习 Go 时,要慢慢接受“不要通过共享内存来通信,而要通过通信来共享内存”;学习 Python 时,也要慢慢建立另一种直觉:名字和对象的关系、可变与不可变的边界、解释器执行模型、包管理环境、动态类型带来的自由和代价。
Python 的门很宽,但走得稳,需要一点耐心。
AI时代,Python能力会变得越来越基础
AI 项目里,Python 的重要性还会继续上升。
因为 AI 开发本身带着很强的实验属性。你经常需要读取一批样本,改一个 Prompt,跑一次模型,解析一批结果,再把错误案例筛出来继续调整。这个过程不总是优雅的,有时甚至有点“边走边修路”。Python 恰好适合这种工作方式。
它能很快把想法变成可运行的原型,也能借助成熟生态继续往工程化方向演进。前一天你可能还在 Notebook 里调试一个数据清洗函数,后一天就需要把它拆成模块、加上日志、配置、重试、测试,再接入真实服务。
这也是我想写 Python小技巧&易错点100例 的原因。
它不会只是一份语法笔记,也不会只整理冷门知识点。我更希望它像之前的 Go 系列一样,记录那些在真实开发中会反复出现的问题:
- 为什么我的包在命令行能导入,放到项目里就导入失败?
- 为什么
asyncio 写了异步,接口还是一个个慢慢请求?
这些问题看似零散,但串起来,就是一个后端开发者进入 AI 工程世界时需要补齐的路径。
重新出发,不是从零开始
重新学习 Python,并不意味着过去的 Go 经验要清零。
恰恰相反,过去的工程经验会变成新的参照系。
理解过 Go 的错误处理,再看 Python 的异常机制,会更关注错误边界和日志记录;写过 Go 的并发,再学 Python 的线程、进程和 asyncio,会更关心任务模型和资源控制;经历过 Go 项目的模块管理,再碰 Python 的虚拟环境和依赖锁定,也会更敏感地意识到环境一致性的重要。
语言会变,问题的底层逻辑不会完全变。
我们依然是在追求更清晰的表达、更稳定的程序、更可维护的项目,以及更少的线上意外。
只是在 AI 时代,工具箱需要更新,问题域也变得更有意思了。
所以这个系列就从这里开始。
前面有 Go小技巧&易错点100例,那是我在 Go 开发路上留下的一串脚印;现在有 Python小技巧&易错点100例,它会记录我在 AI 项目和 Python 开发中的新一轮踩坑、修正和理解。
希望它不只是“100 个知识点”的堆叠,而是一段重新熟悉语言、重新理解工程、重新适应 AI 时代开发方式的过程。
我们不是换一门语言就重新变回新手。
我们只是带着过去学会的东西,走进一个新的房间,打开灯,重新出发。