Python编程基础

课程介绍

本模块专注于AI开发中常用的Python高级特性和最佳实践。通过实际案例和hands-on练习,帮助你掌握AI开发必备的Python技能。

学习目标

完成本模块学习后,你将能够:

  • 熟练运用Python高级特性进行AI开发
  • 掌握异步编程在AI中的应用
  • 理解并实践Python性能优化
  • 搭建规范的AI开发环境

1. 开发环境配置

1.1 Python安装与版本选择

# 检查Python版本
python --version  # 建议使用3.8+版本

# 安装Python(如果需要)
brew install python@3.8  # macOS

1.2 虚拟环境管理

# 创建虚拟环境
python -m venv .venv

# 激活虚拟环境
source .venv/bin/activate  # Unix/macOS
.venv\Scripts\activate     # Windows

# 安装依赖
pip install -r requirements.txt

2. Python高级特性

2.1 类型提示与静态检查

from typing import List, Dict, Optional

def process_data(data: List[float]) -> Dict[str, float]:
    """处理数值数据并返回统计结果"""
    return {
        'mean': sum(data) / len(data),
        'max': max(data),
        'min': min(data)
    }

# 使用mypy进行静态类型检查
# mypy data_processor.py

2.2 装饰器与元编程

import time
from functools import wraps

def timing_decorator(func):
    """测量函数执行时间的装饰器"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} 执行时间: {end_time - start_time:.2f}秒")
        return result
    return wrapper

@timing_decorator
def train_model(epochs: int):
    """模型训练函数"""
    time.sleep(1)  # 模拟训练过程
    print(f"完成{epochs}轮训练")

3. 异步编程

3.1 协程与异步IO

import asyncio
import aiohttp
import aiofiles

async def download_data(url: str, filename: str):
    """异步下载数据"""
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            data = await response.read()
            async with aiofiles.open(filename, 'wb') as f:
                await f.write(data)

async def main():
    """并发下载多个数据集"""
    urls = [
        'https://example.com/dataset1.csv',
        'https://example.com/dataset2.csv'
    ]
    tasks = [
        download_data(url, f'dataset_{i}.csv')
        for i, url in enumerate(urls)
    ]
    await asyncio.gather(*tasks)

# 运行异步任务
asyncio.run(main())

3.2 并发数据处理

import concurrent.futures
import numpy as np

def process_chunk(data: np.ndarray) -> np.ndarray:
    """处理数据块"""
    return np.square(data)  # 示例操作

def parallel_processing(data: np.ndarray, n_jobs: int = -1):
    """并行处理大型数据集"""
    chunks = np.array_split(data, n_jobs)
    with concurrent.futures.ProcessPoolExecutor() as executor:
        results = list(executor.map(process_chunk, chunks))
    return np.concatenate(results)

4. 性能优化

4.1 代码优化技巧

# 使用列表推导式
squares = [x**2 for x in range(1000)]  # 比for循环快

# 使用生成器节省内存
def data_generator(n: int):
    for i in range(n):
        yield i**2

# 使用NumPy向量化运算
import numpy as np
data = np.array([1, 2, 3, 4, 5])
result = np.square(data)  # 比循环快得多

4.2 内存管理

# 使用__slots__优化内存
class DataPoint:
    __slots__ = ['x', 'y', 'label']
    
    def __init__(self, x: float, y: float, label: str):
        self.x = x
        self.y = y
        self.label = label

# 使用生成器处理大文件
def process_large_file(filename: str):
    with open(filename) as f:
        for line in f:  # 逐行读取,避免一次性加载
            yield process_line(line)

5. Python高级特性

5.1 装饰器与元类

# 🎯 实战案例:创建模型性能监控装饰器
import time
from functools import wraps

def monitor_performance(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"函数 {func.__name__} 执行时间: {end_time - start_time:.2f}秒")
        return result
    return wrapper

@monitor_performance
def train_model(epochs):
    # 模拟模型训练
    time.sleep(2)
    return "模型训练完成"

5.2 生成器与迭代器

# 🔄 实战案例:批量数据生成器
def batch_generator(data, batch_size=32):
    """高效的批量数据生成器"""
    for i in range(0, len(data), batch_size):
        yield data[i:i + batch_size]

# 使用示例
training_data = list(range(1000))
for batch in batch_generator(training_data):
    # 处理每个批次
    pass

6. 异步编程

6.1 协程基础

# ⚡️ 实战案例:异步数据加载
import asyncio
import aiohttp

async def fetch_data(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.json()

async def main():
    urls = [
        "https://api.example.com/data1",
        "https://api.example.com/data2"
    ]
    tasks = [fetch_data(url) for url in urls]
    results = await asyncio.gather(*tasks)
    return results

6.2 异步框架应用

# 🚀 实战案例:FastAPI服务端点
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class PredictionRequest(BaseModel):
    text: str

@app.post("/predict")
async def predict(request: PredictionRequest):
    # 异步预测处理
    result = await process_prediction(request.text)
    return {"prediction": result}

7. 性能优化

7.1 代码优化技巧

# ⚡️ 实战案例:向量化运算
import numpy as np

# 优化前
def slow_distance(x1, y1, x2, y2):
    result = []
    for i in range(len(x1)):
        result.append(((x1[i]-x2[i])**2 + (y1[i]-y2[i])**2)**0.5)
    return result

# 优化后
def fast_distance(x1, y1, x2, y2):
    return np.sqrt((x1-x2)**2 + (y1-y2)**2)

7.2 并行计算

# 🔄 实战案例:多进程数据处理
from multiprocessing import Pool

def process_chunk(data_chunk):
    # 数据处理逻辑
    return processed_result

def parallel_processing(data, num_processes=4):
    with Pool(num_processes) as pool:
        results = pool.map(process_chunk, data)
    return results

8. 环境管理

8.1 虚拟环境

# 创建项目专用环境
python -m venv ai-env

# 激活环境
source ai-env/bin/activate  # Unix
ai-env\Scripts\activate    # Windows

# 安装依赖
pip install -r requirements.txt

8.2 依赖管理

# 📦 requirements.txt 示例
numpy>=1.21.0
pandas>=1.3.0
torch>=1.9.0
transformers>=4.5.0

实战项目:AI数据处理Pipeline

项目描述

构建一个高效的AI数据处理Pipeline,综合运用本模块所学的Python高级特性。

项目代码框架

class AIPipeline:
    def __init__(self):
        self.steps = []
    
    @monitor_performance
    def add_step(self, step_func):
        self.steps.append(step_func)
    
    async def process(self, data):
        for step in self.steps:
            data = await step(data)
        return data

# 使用示例
pipeline = AIPipeline()
pipeline.add_step(preprocess_data)
pipeline.add_step(feature_extraction)
pipeline.add_step(model_prediction)

练习与作业

  1. 实现一个异步数据加载器
  2. 优化现有代码性能
  3. 搭建完整的AI开发环境

扩展阅读

小测验

  1. 装饰器的主要用途是什么?
  2. 异步编程如何提高AI应用性能?
  3. 如何选择合适的并行处理方式?

下一步学习

  • 数学基础
  • 数据处理技术
  • 机器学习算法

常见问题解答

Q: 为什么要使用异步编程? A: 在AI开发中,异步编程可以显著提高数据加载和预处理的效率,特别是在处理大量I/O操作时。

Q: 如何选择合适的Python版本? A: 建议使用Python 3.8+,这些版本提供了完整的类型提示支持和最新的异步特性。

Q: 为什么要使用类型提示? A: 类型提示可以帮助我们在开发早期发现潜在问题,提高代码可维护性,并提供更好的IDE支持。