第0章 - Python 快速入门
嗨,朋友!我是长安。
在正式开始 FastAPI 之前,我先帮你快速掌握一下必备的 Python 基础知识。这些都是我当年自学时总结出来的精华,不会讲那些用不到的东西。
🎯 学习目标
本章将快速带你掌握使用 FastAPI 开发接口所需的 Python 基础知识。
长安说
如果你已经熟悉 Python 基础,可以直接跳到 第1章 - FastAPI 简介。但如果你和当年的我一样是零基础,建议跟着我认真学完这一章!
1️⃣ 变量和数据类型
1.1 变量定义
Python 中定义变量非常简单,不需要声明类型:
# 字符串
name = "张三"
message = '你好,世界!'
# 数字
age = 25
price = 99.99
# 布尔值
is_active = True
is_deleted = False
# 空值
result = None
1.2 常用数据类型
# 1. 字符串 (str)
username = "admin"
email = "admin@example.com"
# 2. 整数 (int)
user_id = 1001
count = 100
# 3. 浮点数 (float)
price = 99.99
score = 85.5
# 4. 布尔值 (bool)
is_vip = True
is_banned = False
# 5. 列表 (list) - 可以存放多个值
users = ["张三", "李四", "王五"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, 3.14] # 可以混合类型
# 6. 字典 (dict) - 键值对
user = {
"id": 1,
"name": "张三",
"age": 25,
"email": "zhangsan@example.com"
}
# 7. 元组 (tuple) - 不可修改的列表
point = (10, 20)
rgb = (255, 0, 0)
1.3 类型提示(重要!)
FastAPI 大量使用类型提示,这是 Python 3.6+ 的特性:
# 基本类型提示
name: str = "张三"
age: int = 25
price: float = 99.99
is_active: bool = True
# 列表类型提示
from typing import List
names: List[str] = ["张三", "李四"]
scores: List[int] = [85, 90, 95]
# 字典类型提示
from typing import Dict
user: Dict[str, any] = {"name": "张三", "age": 25}
# 可选类型(可以是 None)
from typing import Optional
nickname: Optional[str] = None # 可以是字符串或 None
2️⃣ 字符串操作
# 字符串拼接
first_name = "张"
last_name = "三"
full_name = first_name + last_name # "张三"
# 格式化字符串(推荐使用 f-string)
name = "张三"
age = 25
message = f"我叫{name},今年{age}岁" # "我叫张三,今年25岁"
# 常用方法
text = " Hello World "
text.strip() # "Hello World" - 去除两端空格
text.lower() # " hello world " - 转小���
text.upper() # " HELLO WORLD " - 转大写
text.replace("Hello", "Hi") # " Hi World " - 替换
# 字符串分割
email = "admin@example.com"
parts = email.split("@") # ["admin", "example.com"]
3️⃣ 列表操作
# 创建列表
fruits = ["苹果", "香蕉", "橙子"]
# 访问元素(索引从 0 开始)
first = fruits[0] # "苹果"
last = fruits[-1] # "橙子" - 负数表示从后往前
# 添加元素
fruits.append("葡萄") # 在末尾添加
fruits.insert(1, "西瓜") # 在指定位置插入
# 删除元素
fruits.remove("香蕉") # 删除指定元素
last_item = fruits.pop() # 删除并返回最后一个元素
# 列表长度
count = len(fruits) # 获取列表长度
# 遍历列表
for fruit in fruits:
print(fruit)
# 列表推导式(常用技巧)
numbers = [1, 2, 3, 4, 5]
doubled = [n * 2 for n in numbers] # [2, 4, 6, 8, 10]
4️⃣ 字典操作
# 创建字典
user = {
"id": 1,
"name": "张三",
"age": 25,
"email": "zhangsan@example.com"
}
# 访问值
name = user["name"] # "张三"
age = user.get("age") # 25
phone = user.get("phone", "无") # "无" - 如果键不存在返回默认值
# 修改值
user["age"] = 26
# 添加新键值对
user["phone"] = "13800138000"
# 删除键值对
del user["email"]
# 检查键是否存在
if "name" in user:
print("用户名存在")
# 遍历字典
for key, value in user.items():
print(f"{key}: {value}")
# 获取所有键和值
keys = user.keys() # 所有键
values = user.values() # 所有值
5️⃣ 条件判断
# if-elif-else
age = 18
if age < 18:
print("未成年")
elif age < 60:
print("成年人")
else:
print("老年人")
# 比较运算符
# == 等于
# != 不等于
# > 大于
# < 小于
# >= 大于等于
# <= 小于等于
# 逻辑运算符
age = 25
is_vip = True
if age >= 18 and is_vip: # and - 与
print("成年VIP用户")
if age < 18 or is_vip: # or - 或
print("未成年或VIP用户")
if not is_vip: # not - 非
print("非VIP用户")
# 简写形式(三元表达式)
status = "成年" if age >= 18 else "未成年"
6️⃣ 循环
# for 循环 - 遍历序列
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
# 遍历数字范围
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
for i in range(0, 10, 2): # 0, 2, 4, 6, 8 (步长为2)
print(i)
# while 循环
count = 0
while count < 5:
print(count)
count += 1
# break 和 continue
for i in range(10):
if i == 3:
continue # 跳过本次循环
if i == 7:
break # 跳出循环
print(i)
7️⃣ 函数定义
函数是 FastAPI 的核心,每个接口都是一个函数!
# 基本函数
def say_hello():
print("你好!")
say_hello() # 调用函数
# 带参数的函数
def greet(name):
print(f"你好,{name}!")
greet("张三") # 你好,张三!
# 带返回值的函数
def add(a, b):
return a + b
result = add(3, 5) # 8
# 带类型提示的函数(FastAPI 必备!)
def add_numbers(a: int, b: int) -> int:
return a + b
# 带默认参数
def greet(name: str, greeting: str = "你好") -> str:
return f"{greeting},{name}!"
greet("张三") # "你好,张三!"
greet("张三", "早上好") # "早上好,张三!"
# 多个返回值
def get_user_info():
name = "张三"
age = 25
return name, age
name, age = get_user_info()
8️⃣ 类和对象
FastAPI 使用 Pydantic 模型来定义数据结构,需要了解类的基础:
# 定义类
class User:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
def introduce(self):
return f"我叫{self.name},今年{self.age}岁"
# 创建对象
user = User("张三", 25)
print(user.name) # "张三"
print(user.introduce()) # "我叫张三,今年25岁"
# 继承
class VIPUser(User):
def __init__(self, name: str, age: int, level: int):
super().__init__(name, age)
self.level = level
def introduce(self):
return f"我叫{self.name},今年{self.age}岁,VIP等级{self.level}"
vip = VIPUser("李四", 30, 5)
print(vip.introduce())
9️⃣ 导入模块
# 导入整个模块
import math
result = math.sqrt(16) # 4.0
# 导入特定函数
from math import sqrt, pow
result = sqrt(16) # 4.0
# 导入并重命名
import datetime as dt
now = dt.datetime.now()
# 从包中导入
from typing import List, Dict, Optional
from pydantic import BaseModel
# FastAPI 常用导入
from fastapi import FastAPI, HTTPException, status
from fastapi.responses import JSONResponse
🔟 异常处理
# try-except 基本用法
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")
# 捕获多种异常
try:
number = int("abc")
except ValueError:
print("转换失败")
except Exception as e:
print(f"发生错误:{e}")
# finally - 无论是否异常都会执行
try:
file = open("data.txt")
# 处理文件
except FileNotFoundError:
print("文件不存在")
finally:
print("清理资源")
# 主动抛出异常(FastAPI 中常用)
def get_user(user_id: int):
if user_id < 0:
raise ValueError("用户ID不能为负数")
return {"id": user_id, "name": "张三"}
1️⃣1️⃣ 装饰器(重要!)
FastAPI 的路由就是用装饰器实现的:
# 装饰器基础
def my_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# 输出:
# 函数执行前
# Hello!
# 函数执行后
# FastAPI 中的装饰器用法
from fastapi import FastAPI
app = FastAPI()
@app.get("/") # 这就是装饰器!
def read_root():
return {"message": "Hello World"}
1️⃣2️⃣ 异步编程基础
FastAPI 支持异步,了解基础概念:
# 同步函数(普通函数)
def get_user():
return {"name": "张三"}
# 异步函数(使用 async/await)
async def get_user_async():
return {"name": "张三"}
# FastAPI 中两种都可以用
from fastapi import FastAPI
app = FastAPI()
# 同步接口
@app.get("/sync")
def sync_endpoint():
return {"message": "同步接口"}
# 异步接口(处理 I/O 操作时更高效)
@app.get("/async")
async def async_endpoint():
return {"message": "异步接口"}
1️⃣3️⃣ 列表/字典推导式
Python 的高效写法,FastAPI 开发中经常用到:
# 列表推导式
numbers = [1, 2, 3, 4, 5]
squared = [n ** 2 for n in numbers] # [1, 4, 9, 16, 25]
# 带条件的列表推导式
even_numbers = [n for n in numbers if n % 2 == 0] # [2, 4]
# 字典推导式
users = ["张三", "李四", "王五"]
user_dict = {i: name for i, name in enumerate(users)}
# {0: "张三", 1: "李四", 2: "王五"}
# 实际应用示例
students = [
{"name": "张三", "score": 85},
{"name": "李四", "score": 92},
{"name": "王五", "score": 78}
]
# 提取所有分数大于80的学生名字
high_scorers = [s["name"] for s in students if s["score"] > 80]
# ["张三", "李四"]
1️⃣4️⃣ 常用内置函数
# len() - 获取长度
len([1, 2, 3]) # 3
len("hello") # 5
# max() / min() - 最大值/最小值
max([1, 5, 3]) # 5
min([1, 5, 3]) # 1
# sum() - 求和
sum([1, 2, 3, 4]) # 10
# sorted() - 排序
sorted([3, 1, 4, 2]) # [1, 2, 3, 4]
# enumerate() - 带索引遍历
for index, value in enumerate(["a", "b", "c"]):
print(f"{index}: {value}")
# 0: a
# 1: b
# 2: c
# zip() - 并行遍历
names = ["张三", "李四"]
ages = [25, 30]
for name, age in zip(names, ages):
print(f"{name}: {age}岁")
# map() - 映射
numbers = [1, 2, 3]
doubled = list(map(lambda x: x * 2, numbers)) # [2, 4, 6]
# filter() - 过滤
numbers = [1, 2, 3, 4, 5]
even = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
1️⃣5️⃣ FastAPI 必备知识点总结
使用 FastAPI 开发接口,你需要重点掌握:
✅ 必须掌握
- 类型提示 -
name: str,age: int,List[str],Optional[int] - 函数定义 - 每个接口都是一个函数
- 字典操作 - JSON 数据就是字典
- 装饰器 -
@app.get(),@app.post() - 类和对象 - Pydantic 模型
⭐ 建议掌握
- 列表操作 - 处理数组数据
- 条件判断 - 业务逻辑
- 异常处理 - 错误处理
- 导入模块 - 使用各种库
💡 了解即可
- 异步编程 - 提升性能(可选)
- 推导式 - 简化代码(可选)
📝 实战练习
完成以下练习,巩固所学知识:
练习1:用户信息处理
# 定义一个函数,接收用户信息字典,返回格式化的字符串
def format_user_info(user: dict) -> str:
# TODO: 实现这个函数
# 输入:{"name": "张三", "age": 25, "email": "zhangsan@example.com"}
# 输出:"姓名:张三,年龄:25岁,邮箱:zhangsan@example.com"
pass
点击查看答案
def format_user_info(user: dict) -> str:
return f"姓名:{user['name']},年龄:{user['age']}岁,邮箱:{user['email']}"
# 测试
user = {"name": "张三", "age": 25, "email": "zhangsan@example.com"}
print(format_user_info(user))
练习2:数据过滤
# 从学生列表中筛选出分数大于等于60分的学生
students = [
{"name": "张三", "score": 85},
{"name": "李四", "score": 45},
{"name": "王五", "score": 92},
{"name": "赵六", "score": 58}
]
# TODO: 使用列表推导式筛选及格的学生
passed_students = []
点击查看答案
passed_students = [s for s in students if s["score"] >= 60]
print(passed_students)
# [{"name": "张三", "score": 85}, {"name": "王五", "score": 92}]
练习3:定义用户类
# 定义一个 User 类,包含 name, age, email 属性
# 并实现一个 to_dict() 方法,返回字典格式的用户信息
class User:
# TODO: 实现这个类
pass
点击查看答案
class User:
def __init__(self, name: str, age: int, email: str):
self.name = name
self.age = age
self.email = email
def to_dict(self) -> dict:
return {
"name": self.name,
"age": self.age,
"email": self.email
}
# 测试
user = User("张三", 25, "zhangsan@example.com")
print(user.to_dict())
🎯 快速参考卡片
# 变量定义
name: str = "张三"
age: int = 25
scores: List[int] = [85, 90, 95]
# 字典操作
user = {"name": "张三", "age": 25}
name = user.get("name", "默认值")
# 列表操作
fruits = ["苹果", "香蕉"]
fruits.append("橙子")
# 函数定义
def add(a: int, b: int) -> int:
return a + b
# 类定义
class User:
def __init__(self, name: str):
self.name = name
# 条件判断
if age >= 18:
print("成年")
else:
print("未成年")
# 循环
for item in items:
print(item)
# 异常处理
try:
result = risky_operation()
except Exception as e:
print(f"错误:{e}")
# 导入
from typing import List, Optional
from fastapi import FastAPI
🚀 下一步
恭喜你!现在你已经掌握了使用 FastAPI 开发接口所需的 Python 基础知识。
说实话,我当年学到这些内容花了不少时间。如果你能看到这里,说明你已经迈出了非常关键的一步!
准备好开始学习 FastAPI 了吗?
💡 学习资源
长安的建议
不需要把所有 Python 知识都学完才开始 FastAPI! 边学 FastAPI 边补充 Python 知识是更高效的学习方式。这是我多年经验总结出来的,相信我!
