后端第六课:Python 语法速通(0 基础入门,AI 应用开发的第一门语言)
我是 Yulia一线 AI 应用开发工程师4 年工程经验在职做大模型应用落地。只写一件事——把最新 AI 技术讲成人话 给你能直接跑通的代码全部本机实测不搬运不注水。有用就点个关注持续更新大模型应用的前沿实战。 本文是《后端开发从入门到靠谱》系列第 6 篇。第五课我们选定了主线语言Python FastAPI——这一篇正式开始学 Python 语法。整个系列共 20 篇我会在关键知识点处标注 Java / Go 的对应写法让你边学边建立三语言对照感。关注我不错过后续 14 篇。上一课我们解决了学什么语言这一课解决怎么学。网上 Python 语法教程很多但大多是零散的知识点罗列——学了几个月还是写不出一个完整的小项目。这篇不一样我按写程序时的真实思考顺序组织语法先存数据 → 再控制流程 → 再组织代码并且每一节都标注 Java / Go 的差别让你从一开始就建立三语言对照感。读完你会拿到Python 全部核心语法变量、数据类型、控制流、函数、类、异常、模块一个思维模型动态类型 vs 静态类型——三语言差异的总根源每个语法点的 Java / Go 对照写法差别一目了然一套学完就能写小脚本、为 FastAPI 和 AI 应用打底的语法体系先看全景图建立全局认知Python 语法体系变量与类型动态类型数字 字符串 布尔列表 元组 字典 集合控制流if 分支for while 循环推导式函数def 定义参数与返回值lambda 匿名函数面向对象class 类继承与多态dunder 魔法方法异常处理try except模块与包importpip 与虚拟环境一、先建立总思维模型动态类型 vs 静态类型学 Python 语法之前必须先理解一个概念——它决定了后面所有语法的样子。Python 是动态类型语言Java 和 Go 是静态类型语言。差别在哪# Python变量没有类型声明赋值什么就是什么age25# 是整数age二十五# 现在变成了字符串完全合法// Java变量必须声明类型之后不能变intage25;// 明确声明是 intage二十五;// 编译直接报错// Go同样静态类型但写法更简洁age:25// : 自动推断类型为 intage二十五// 编译报错一句话总结差别静态类型Java/Go在编译时就把类型锁死错误在写代码时就被编译器抓住动态类型Python在运行时才检查类型写起来灵活但错误可能到运行时才爆出来。这个模型能解释后面的一切为什么 Python 不需要写int、string这些类型名自动推断为什么 Python 的同一个变量能存任何类型运行时才知道为什么 Java/Go 代码更啰嗦但更安全类型提前锁定。二、变量与数据类型2.1 变量直接赋值即可Python 定义变量不需要任何关键字直接赋值nameYulia# 字符串 strage25# 整数 intprice19.9# 浮点数 floatis_studentTrue# 布尔 boolJava 对照String name Yulia; int age 25;类型在前分号结尾Go 对照name : Yulia冒号等号自动推断或var name string Yulia注意两个 Python 细节语句结尾没有分号Java/Go 都要分号代码块用缩进表示Java/Go 用大括号{}。缩进是 Python 语法的核心后面每节都会体现。2.2 数字与字符串a103# 13b10/3# 3.3333... 除法一定得浮点数Java/Go 的整数除法会截断c10//3# 3 整除d10%3# 1 取余e2**10# 1024 幂运算Java/Go 没有 ** 运算符shello world# 字符串拼接print(f我有{age}岁)# f-string 格式化Python 最推荐的写法Java 对照10 / 3结果是3整数除法截断需要10.0 / 3才得浮点数——这是三语言最经典的坑差别。Go 对照同样10 / 3 3格式化用fmt.Printf(我有 %d 岁, age)。2.3 四种容器类型列表 / 元组 / 字典 / 集合这是 Python 数据操作的核心AI 开发里天天用# 列表 list有序、可修改对应 Java 的 ArrayListGo 的 slicenums[1,2,3]nums.append(4)# [1, 2, 3, 4] 追加nums[0]# 1 按下标访问从 0 开始nums[-1]# 4 负数下标 从末尾数Python 特色nums[1:3]# [2, 3] 切片取下标 1 到 2左闭右开len(nums)# 4 长度# 元组 tuple有序、不可修改定义后不能增删改point(3,5)point[0]# 3# point[0] 9 # 报错元组不可变# 字典 dict键值对对应 Java 的 HashMapGo 的 mapuser{name:Yulia,age:25}user[age]# 25user[city]北京# 新增键fork,vinuser.items():print(k,v)# 集合 set无序、元素唯一去重神器ids{1,2,2,3}print(ids)# {1, 2, 3} 自动去重可变 vs 不可变是 Python 的一个关键概念类型可变含义list / dict / set可变创建后能改内容tuple / str / int / float / bool不可变创建后不能改任何修改都是生成新对象它影响两件事① 不可变类型可以当字典的 key{(1,2): a}合法{[1,2]: a}报错② 函数传参时可变对象会被原地修改第四节会讲这个坑。三、控制流让程序会判断、会循环3.1 if 分支score85ifscore90:print(优秀)# 注意冒号结尾 缩进开始代码块elifscore60:# elif Java/Go 的 else ifprint(及格)else:print(不及格)Java/Go 对照if (score 90) { ... }——条件要加括号、代码块用大括号。Python 用冒号 缩进替代了这两样。3.2 for / while 循环# for 循环直接遍历容器不需要写下标fornin[1,2,3]:print(n)foriinrange(5):# range(5) 生成 0,1,2,3,4print(i)# while 循环count0whilecount3:count1# Python 没有 count 这种写法# break / continue 与 Java/Go 一致Java 对照for (int i 0; i 5; i) { ... }——三要素写全。Go 对照for i : 0; i 5; i { ... }——Go 只有 for 一种循环关键字。注意Python 没有i/i只有i 1。3.3 列表推导式Python 最优雅的语法糖squares[x**2forxinrange(10)]# 0~9 的平方evens[xforxinrange(20)ifx%20]# 带条件的过滤这两行对应 Java/Go 里四五行的循环代码。推导式是 Python 风格的核心——AI 开发里处理数据时几乎处处用它务必练熟。四、函数组织代码的第一步4.1 定义与调用defadd(a,b):求和这是文档字符串returnabprint(add(1,2))# 34.2 参数的花样defgreet(name,greeting你好):# 默认参数不传就用默认值print(f{greeting}{name})greet(Yulia)# 你好Yuliagreet(Yulia,greeting早)# 关键字参数按名字传可乱序greet(greeting早,nameYulia)defsum_all(*args):# *args接收任意多个位置参数变成元组returnsum(args)defshow(**kwargs):# **kwargs接收任意多个关键字参数变成字典print(kwargs)Java 对照Java 没有默认参数和关键字参数靠方法重载模拟变长参数是void f(int... nums)。Go 对照Go 同样没有默认参数/关键字参数变长参数是func f(nums ...int)。*args/**kwargs是 Python 独有的灵活性。4.3 作用域与可变对象的坑defappend_to(lst,item):lst.append(item)# lst 是可变对象原地修改——外面也变了nums[1,2]append_to(nums,3)print(nums)# [1, 2, 3] —— 不是 [1, 2]这是 Python 新手必踩的坑可变对象list/dict传进函数后函数内的修改会带出来。理解方法变量名只是标签函数内外贴的是同一个对象。4.4 lambda 匿名函数squarelambdax:x**2square(5)# 25nums[3,1,2]nums.sort(keylambdax:-x)# 按降序排key 接收一个函数lambda 适合只用一次的小函数常和sort、map、filter搭配。五、面向对象三个语言三种哲学面向对象OOP是语法里最体现语言性格的部分三语言差别最大5.1 class 基础classUser:def__init__(self,name,age):# 构造方法self 对象自己self.namename self.ageagedefintroduce(self):print(f我是{self.name}{self.age}岁)uUser(Yulia,25)# 创建对象不用 new 关键字u.introduce()三个关键点self是对象自己的引用每个方法第一个参数必须写 selfJava/Go 里是隐式的 this不用写出来__init__是构造方法双下划线开头结尾的方法叫dunder / 魔法方法Python 特色创建对象直接User(...)没有 new 关键字Java 要new User(...)。5.2 继承与多态classAnimal:defspeak(self):return...classDog(Animal):# 括号里写父类 继承defspeak(self):return汪汪# 覆写父类方法classCat(Animal):defspeak(self):return喵forain[Dog(),Cat()]:# 多态同一句代码行为随对象而变print(a.speak())# 汪汪 / 喵三语言哲学对照这一节的灵魂PythonJavaGo类有 class一切皆 class没有 class用 struct 方法继承支持鸭子类型更常用单继承 接口没有继承用组合 接口多态鸭子类型“叫起来像鸭子就是鸭子”接口/继承interface 隐式实现访问控制约定_前缀表示私有不强制private/protected/public 关键字首字母大小写决定包内外可见Go 特别说明Go 没有类和继承type Dog struct { ... } 为类型定义方法接口是隐式实现有这个方法就算实现了接口不用显式声明。理解这点学 Go 时就不会用 Java 思维硬套。5.3 Python 的鸭子类型defmake_it_speak(obj):print(obj.speak())# 不检查 obj 是什么类型只要有 speak 方法就能用make_it_speak(Dog())# 汪汪make_it_speak(Cat())# 喵这就是鸭子类型不关心你是什么只关心你会不会。它让 Python 代码极其灵活代价是类型错误要到运行时才发现——第一节动态类型模型的直接体现。六、异常处理出错不崩优雅兜底try:nint(input(输入一个数字))print(10/n)exceptValueError:print(你输的不是数字)# 捕获特定异常exceptZeroDivisionError:print(不能除以 0)exceptExceptionase:print(f其它错误{e})# 兜底捕获as e 拿到异常对象else:print(没有异常才会执行)finally:print(无论是否异常都执行)Java 对照try/catch/finally但 Java 有受检异常——方法签名必须声明可能抛出的异常编译器强制处理。Python 和 Go 都没有这个强制。Go 对照没有 try/catchGo 的哲学是多返回值result, err : f()靠检查if err ! nil处理错误。这是学 Go 时思维转换最大的一点。七、模块与包复用别人写好的代码importmath# 导入整个模块print(math.sqrt(16))# 4.0frommathimportsqrt# 只导入某个函数print(sqrt(16))importnumpyasnp# 起别名社区惯例numpy/pandas 都这么写arrnp.array([1,2,3])# pip 安装第三方库# pip install numpy pandas fastapi配套概念模块一个.py文件就是一个模块包一个含__init__.py的目录pipPython 的包管理器对应 Java 的 Maven、Go 的 go modules虚拟环境每个项目独立的依赖空间python -m venv venv创建——动手写项目前必学否则不同项目的依赖会互相打架。八、三语言语法差别速查表学了这么多最后把三语言的关键语法并排放一起这张表建议收藏语法点PythonJavaGo变量声明x 1int x 1;x : 1语句结尾无分号分号分号代码块缩进{}{}整数除法10/3→ 3.3310/3→ 310/3→ 3for 循环for i in range(5)for (int i0; i5; i)for i : 0; i 5; i自增i 1无 iii类class User:class User {}无 classstruct构造__init__ self同名构造器无约定 NewXxx异常try/excepttry/catch受检异常无多返回值 err包管理pipMaven/Gradlego modules总结一张图带走三个立即可用的行动打开任意在线 Python 环境把第二到七节的代码全部亲手敲一遍语法不是看会的是敲会的把第八节速查表存到收藏夹学 Java/Go 的时候翻回来对照写一个 30 行以内的小脚本练手读一个列表、过滤、排序、写进文件——检验这一课的全部语法点。如果这篇对你有帮助点个赞、收藏一下下一篇对照这张速查表学 Java 会轻松很多。关注我这个系列共 20 篇Python 语法 → Java 对照 → Go 对照 → 网络 → 数据库 → FastAPI 实战 → AI 应用后端架构一路带你到能独立写生产级后端。你在学 Python 时踩过什么坑是10/3的除法还是可变对象传参的灵异事件评论区聊聊我挨个回。本文语法基于 Python 3.10 撰写Java 对照基于 Java 17Go 对照基于 Go 1.21有版本差异评论区提醒我。