Python 是一门解释型、动态强类型、多范式的语言,以语法简洁、生态丰富著称,广泛用于 Web、数据科学、自动化与 AI 领域。本教程按"语法 → 数据结构 → 面向对象 → 装饰器 → 异步 → 常用库 → 实战"的脉络展开。
一、环境搭建与基础语法
建议使用 pyenv 或官方安装包管理多版本 Python,用 venv 创建虚拟环境隔离项目依赖。Python 用缩进表示代码块,缩进必须一致(推荐 4 个空格)。
基本数据类型
Python 内置 int、float、bool、str、NoneType 等基本类型。整数不会溢出(受内存限制),字符串不可变。
name = 'mrgr.cn'
age = 5
is_open = True
# f-string 格式化(推荐)
print(f'{name} 已运营 {age} 年') # mrgr.cn 已运营 5 年
# 类型查看
type(name) # <class 'str'>
type(age) # <class 'int'>
提示:Python 是动态类型但强类型语言,'1' + 1会抛TypeError,不会隐式转换,需要显式int('1')。
二、数据结构与序列操作
Python 内置四大数据结构:list(列表)、tuple(元组)、dict(字典)、set(集合)。
列表与推导式
nums = [1, 2, 3, 4, 5]
nums.append(6) # 追加
nums[0] = 0 # 修改
squares = [x * x for x in nums if x % 2 == 0]
# [4, 16, 36]
字典与集合
字典(dict)是键值对映射,Python 3.7+ 保证插入顺序;集合(set)用于去重和集合运算。
user = {'name': 'mrgr', 'age': 5}
user['email'] = 'hi@mrgr.cn' # 新增键值
for k, v in user.items():
print(k, v)
tags = {'python', 'web', 'ai'}
tags.add('data')
tags & {'web', 'go'} # 交集 {'web'}
- 可变类型:list、dict、set,可原地修改。
- 不可变类型:tuple、str、frozenset,修改会生成新对象。
- 推导式:list/dict/set 都支持推导式,写法简洁、性能优于循环 append。
三、函数与面向对象
Python 函数用 def 定义,支持默认参数、关键字参数、可变参数(*args、**kwargs)。参数传递是"赋值传递"——传递对象的引用。
类与继承
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return f'{self.name} 发出声音'
class Cat(Animal): # 继承
def speak(self): # 重写
return f'{self.name} 喵喵叫'
c = Cat('小橘')
print(c.speak()) # 小橘 喵喵叫
魔法方法
以双下划线包裹的方法叫魔法方法(dunder),定义了对象的行为:__init__ 构造、__str__ 字符串表示、__len__ 长度、__eq__ 相等比较等。
四、装饰器与上下文管理器
装饰器本质是"接收函数返回函数"的高阶函数,用于在不修改原函数的前提下增强其行为。
计时装饰器
import time
from functools import wraps
def timer(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
start = time.time()
result = fn(*args, **kwargs)
print(f'{fn.__name__} 耗时 {time.time() - start:.3f}s')
return result
return wrapper
@timer
def slow_task():
time.sleep(1)
slow_task() # slow_task 耗时 1.001s
上下文管理器
上下文管理器通过 with 语句保证资源的正确获取与释放,实现 __enter__ 与 __exit__ 即可,也可用 contextlib.contextmanager 装饰器简化。
class FileOpener:
def __init__(self, path):
self.path = path
def __enter__(self):
self.f = open(self.path, 'r', encoding='utf-8')
return self.f
def __exit__(self, exc_type, exc, tb):
self.f.close()
with FileOpener('data.txt') as f:
print(f.read())
五、异步编程 asyncio
Python 的 asyncio 提供单线程并发能力,基于协程(coroutine)与事件循环。协程用 async def 定义,用 await 等待另一个协程完成。
import asyncio
async def fetch(url):
await asyncio.sleep(1) # 模拟 IO
return f'{url} 的内容'
async def main():
# 并发执行,总耗时约 1 秒而非 3 秒
results = await asyncio.gather(
fetch('a'), fetch('b'), fetch('c')
)
print(results)
asyncio.run(main())
要点:asyncio适合 IO 密集场景(网络、文件),CPU 密集任务应配合多进程(multiprocessing)。协程不会自动并行,需要gather或create_task才能并发调度。
六、常用标准库与第三方库
Python 的强大很大程度上来自其丰富的标准库与第三方生态。
os/pathlib:路径与文件系统操作,pathlib是面向对象的现代写法。json:JSON 序列化与反序列化。collections:Counter计数、defaultdict默认值字典、namedtuple命名元组。requests:最流行的 HTTP 客户端,API 友好。FastAPI/Flask:现代 Web 框架,FastAPI 原生支持异步与类型校验。NumPy/Pandas:数据科学基石,处理数值与表格数据。
from collections import Counter
from pathlib import Path
words = ['python', 'web', 'python', 'ai', 'web', 'python']
print(Counter(words)) # Counter({'python': 3, 'web': 2, 'ai': 1})
for p in Path('.').glob('*.py'):
print(p.name)
七、Web 与数据科学实战
学完前面的知识,可以用 Python 做两类常见实战:用 FastAPI 搭建接口服务,用 Pandas 做数据分析。
FastAPI 最小接口
from fastapi import FastAPI
app = FastAPI()
@app.get('/hello')
def hello(name: str = 'mrgr'):
return {'msg': f'hello {name}'}
# 启动:uvicorn main:app --reload
数据科学方向,Pandas 让你像操作 Excel 一样处理表格:
import pandas as pd
df = pd.read_csv('users.csv')
print(df.head()) # 前 5 行
print(df.groupby('city').size()) # 按城市分组计数