1. Python环境安装:为什么需要5分钟?
作为一名从Python 2.7时代就开始折腾环境的老码农,我见过太多新手在环境配置上栽跟头。2023年的今天,Python环境安装其实已经变得非常简单,但网上充斥着大量过时教程和复杂方案,让初学者望而生畏。
实际上,现代Python安装只需要关注三个核心点:
- 官方安装包已经自带了pip和IDLE
- 安装时勾选"Add Python to PATH"就能解决90%的环境问题
- 不需要手动配置任何环境变量
我实测在Windows 10/11系统上,从下载到验证安装成功,确实可以在5分钟内完成。下面我会拆解每个步骤的关键细节,并分享几个只有老手才知道的避坑技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 官方安装包下载的正确姿势
2.1 官网下载的隐藏陷阱
访问python.org/downloads时,新手最容易犯两个错误:
- 下载Windows x86-64 executable installer时误选32位版本
- 直接点击页面顶部黄色大按钮(可能不是最新稳定版)
正确做法是:
- 滚动到"Stable Releases"部分
- 确认版本号(目前推荐3.11.x系列)
- 根据系统选择:
- Windows: Windows installer (64-bit)
- Mac: macOS 64-bit universal2 installer
- Linux: 通常系统已预装
注意:企业内网环境可能需要下载embeddable package,这种情况需要单独配置PATH
2.2 安装包验证(被多数教程忽略的关键)
下载完成后务必做两件事:
- 校验文件哈希值(防止下载损坏)
powershell复制Get-FileHash .\python-3.11.4-amd64.exe -Algorithm SHA256 - 右键安装包→属性→勾选"解除锁定"(特别是企业电脑)
3. 安装过程中的魔鬼细节
3.1 勾选项的玄机
运行安装程序时,你会看到这个关键界面:
- [x] Install launcher for all users (recommended)
- [x] Add Python 3.11 to PATH ← 这个必须勾选!
深层原理:
- 不勾选PATH会导致cmd中无法直接运行python
- 安装器其实会修改系统PATH而非用户PATH
- 老版本Python需要手动配置,3.5+版本已经自动化
3.2 自定义安装的取舍
点击"Customize installation"时,建议:
- 勾选"pip"和"py launcher"
- 不勾选"tcl/tk and IDLE"(除非需要GUI)
- 安装路径不要包含中文和空格
实测发现:安装在C:\Python311\比默认的AppData目录更便于后期管理
4. 验证安装的完整流程
4.1 基础验证三连
安装完成后,按Win+R输入cmd,依次执行:
bash复制python --version
pip --version
python -m pip install --upgrade pip
预期输出:
code复制Python 3.11.4
pip 23.1.2 from ... (python 3.11)
Successfully installed pip-23.1.2
4.2 高级验证(99%教程不会教)
新建test.py文件,内容:
python复制import sys
print(sys.executable)
print(sys.path)
运行后应该看到:
- Python解释器的真实路径
- 正确的模块搜索路径
如果出现"python不是内部命令",说明PATH配置失败,需要手动添加:
powershell复制[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python311\;C:\Python311\Scripts\", "User")
5. 虚拟环境的最佳实践
5.1 为什么需要虚拟环境?
即使只是写个小脚本,也建议使用虚拟环境:
- 避免包冲突(比如同时需要Django 3.2和4.0的项目)
- 便于依赖管理
- 项目迁移时不会污染系统环境
5.2 快速创建虚拟环境
在项目目录下执行:
bash复制python -m venv .venv
.\.venv\Scripts\activate # Windows
source .venv/bin/activate # Mac/Linux
激活后,提示符会显示(.venv),这时所有pip安装的包都会隔离在该环境中。
5.3 虚拟环境进阶技巧
- 指定Python版本创建:
bash复制
python3.11 -m venv py311_env - 包含系统包(适合科学计算场景):
bash复制
python -m venv --system-site-packages .venv - 快速复制环境:
bash复制
python -m venv --copies .venv
6. 常见问题排雷指南
6.1 安装失败的五种可能
- 系统版本不兼容(Win7需要Python 3.8以下)
- 杀毒软件拦截(特别是企业版McAfee)
- 磁盘权限问题(尝试以管理员身份运行)
- 已有Python残留(先卸载旧版)
- 安装路径含中文(改为纯英文路径)
6.2 PATH配置的典型问题
现象:cmd中可以运行python,但VSCode识别不到
解决方案:
- 重启VSCode
- 检查终端是否重启shell
- 在VSCode中按Ctrl+Shift+P,选择"Python: Select Interpreter"
6.3 pip安装慢的终极方案
临时使用镜像源:
bash复制pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
永久修改pip源:
- 创建pip.ini文件(Windows在%APPDATA%\pip\)
- 添加内容:
code复制[global] index-url = https://mirrors.aliyun.com/pypi/simple/ trusted-host = mirrors.aliyun.com
7. 开发环境配置建议
7.1 VSCode最佳配置
- 安装Python扩展
- 设置.json中添加:
json复制"python.linting.enabled": true, "python.formatting.provider": "autopep8", "python.analysis.typeCheckingMode": "basic" - 推荐安装的插件:
- Pylance
- Jupyter
- Python Indent
7.2 PyCharm初始设置
- 新建项目时选择Existing interpreter
- 配置Tools→Python Integrated Tools:
- Testing: pytest
- Docstring: Google style
- 开启Scientific Mode(数据分析时特别有用)
7.3 Jupyter Notebook快速入门
安装:
bash复制pip install notebook
启动:
bash复制jupyter notebook
专业技巧:使用password代替token认证
bash复制jupyter notebook --generate-config
jupyter notebook password
8. 从安装到实战的过渡
8.1 第一个Python程序
创建hello.py:
python复制import platform
print(f"Hello {platform.system()}!")
运行方式对比:
- 直接双击(可能闪退)
- cmd中
python hello.py(推荐) - IDLE中F5运行(适合调试)
8.2 包管理规范
建议的requirements.txt格式:
code复制# 精确版本(生产环境)
numpy==1.24.3
# 兼容版本(开发环境)
pandas>=1.5.0,<2.0.0
# Git仓库
git+https://github.com/user/repo@branch
生成依赖文件:
bash复制pip freeze > requirements.txt
8.3 项目结构示例
标准Python项目应该包含:
code复制project/
│
├── .venv/ # 虚拟环境
├── src/ # 源代码
│ ├── __init__.py
│ └── module.py
├── tests/ # 单元测试
├── docs/ # 文档
├── .gitignore
├── pyproject.toml # 新版打包配置
└── README.md
9. 性能优化小贴士
9.1 启动加速技巧
- 设置PYTHONPYCACHEPREFIX环境变量:
bash复制setx PYTHONPYCACHEPREFIX "C:\pycache" - 使用python -X importtime分析导入耗时
- 避免在__init__.py中写复杂逻辑
9.2 内存优化方案
- 使用__slots__减少内存占用
python复制class Point: __slots__ = ('x', 'y') def __init__(self, x, y): self.x = x self.y = y - 生成器替代列表(特别是处理大文件时)
- 使用array替代list存储数值数据
10. 跨平台兼容性处理
10.1 路径处理的正确姿势
错误做法:
python复制open('C:\Users\name\file.txt') # 反斜杠问题
正确方案:
python复制from pathlib import Path
data_file = Path(__file__).parent / "data.txt"
with open(data_file, encoding='utf-8') as f:
content = f.read()
10.2 换行符统一方案
在代码开头添加:
python复制import os
import io
os.linesep = '\n' # 强制使用Unix换行符
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, newline='\n')
10.3 平台特定代码处理
python复制if sys.platform == "win32":
# Windows特有逻辑
import msvcrt
else:
# Unix-like系统
import fcntl
11. 安全加固建议
11.1 依赖安全检查
定期运行:
bash复制pip install safety
safety check
11.2 防止pip恶意包
- 只从PyPI官方安装
- 检查包名拼写(typosquatting攻击)
- 使用--require-hashes模式:
bash复制
pip install --require-hashes -r requirements.txt
11.3 代码审计工具
推荐组合:
- bandit(基础扫描)
bash复制
pip install bandit bandit -r src/ - semgrep(深度分析)
- trivy(容器环境扫描)
12. 调试与问题诊断
12.1 基础调试方法
- 使用python -i进入交互模式
- 在代码中插入:
python复制import pdb; pdb.set_trace() - 日志调试:
python复制import logging logging.basicConfig(level=logging.DEBUG)
12.2 性能分析工具
- 时间测量:
python复制from timeit import timeit timeit('"-".join(str(n) for n in range(100))', number=10000) - 内存分析:
bash复制
python -m memory_profiler script.py - 火焰图生成:
bash复制
pip install py-spy py-spy top -- python script.py
13. 打包与分发
13.1 现代打包配置
pyproject.toml示例:
toml复制[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "mypackage"
version = "0.1.0"
dependencies = [
"requests>=2.25.0",
]
13.2 构建与上传
- 构建轮子:
bash复制
pip install build python -m build - 上传到PyPI:
bash复制
pip install twine twine upload dist/*
13.3 可执行文件打包
使用PyInstaller:
bash复制pip install pyinstaller
pyinstaller --onefile --windowed script.py
14. 持续集成配置
14.1 GitHub Actions示例
创建.github/workflows/test.yml:
yaml复制name: Python CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Test with pytest
run: |
pytest
14.2 多版本测试矩阵
扩展上述配置:
yaml复制strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11"]
15. 进阶学习路线
15.1 核心技能提升
- 掌握类型注解:
python复制def greet(name: str) -> str: return f"Hello, {name}" - 深入理解GIL机制
- 学习异步编程(asyncio)
15.2 推荐学习资源
- 官方文档:docs.python.org/3/tutorial/
- 书籍:《流畅的Python》
- 视频:Corey Schafer的Python教程
- 实战:Real Python网站案例
15.3 社区参与建议
- 从修复文档开始参与开源
- 在Stack Overflow回答新手问题
- 参加本地PyCon会议
16. 企业级实践
16.1 多版本共存方案
使用pyenv管理多版本:
bash复制pyenv install 3.11.4
pyenv global 3.11.4
16.2 私有包仓库搭建
使用devpi:
bash复制pip install devpi-server
devpi-server --start
devpi use http://localhost:3141
devpi login root --password=
devpi index -c dev bases=root/pypi
16.3 代码规范实施
- 使用black自动格式化:
bash复制
pip install black black . - 配置pre-commit钩子:
yaml复制repos: - repo: https://github.com/psf/black rev: 23.3.0 hooks: - id: black
17. 特殊场景处理
17.1 离线环境安装
- 在有网的机器上:
bash复制
pip download -r requirements.txt --dest ./offline_pkgs - 复制到离线环境:
bash复制
pip install --no-index --find-links=./offline_pkgs -r requirements.txt
17.2 受限权限环境
使用--user参数:
bash复制pip install --user package_name
17.3 容器化部署
Dockerfile示例:
dockerfile复制FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
18. 性能监控方案
18.1 基础监控配置
使用prometheus_client:
python复制from prometheus_client import start_http_server, Counter
REQUEST_COUNT = Counter('app_requests', 'Total app requests')
@app.route('/')
def home():
REQUEST_COUNT.inc()
return "Hello"
18.2 日志集中管理
使用structlog+ELK:
python复制import structlog
structlog.configure(
processors=[
structlog.processors.JSONRenderer()
]
)
log = structlog.get_logger()
log.info("event", user_id=42)
18.3 异常追踪集成
Sentry配置:
python复制import sentry_sdk
sentry_sdk.init(
dsn="your_dsn",
traces_sample_rate=1.0,
)
try:
risky_operation()
except Exception:
sentry_sdk.capture_exception()
19. 现代Python特性
19.1 模式匹配(3.10+)
python复制match response.status:
case 200:
handle_success(response.data)
case 404:
handle_not_found()
case _:
handle_error()
19.2 类型系统增强
使用TypedDict:
python复制from typing import TypedDict
class Point(TypedDict):
x: float
y: float
def draw(p: Point) -> None:
...
19.3 自解释错误
使用ExceptionGroup(3.11+):
python复制try:
...
except* ValueError as eg:
for exc in eg.exceptions:
print(f"Caught: {exc}")
20. 硬件加速方案
20.1 GPU加速
使用CUDA:
bash复制pip install cupy-cuda11x
20.2 多进程优化
使用concurrent.futures:
python复制with ProcessPoolExecutor() as executor:
results = list(executor.map(process_data, large_dataset))
20.3 内存映射文件
处理大文件:
python复制import mmap
with open("large.bin", "r+b") as f:
mm = mmap.mmap(f.fileno(), 0)
data = mm.read(1024)
mm.close()
21. 与其他语言交互
21.1 C扩展开发
使用pybind11:
cpp复制#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(example, m) {
m.def("add", &add);
}
21.2 Rust集成
使用PyO3:
rust复制use pyo3::prelude::*;
#[pyfunction]
fn sum_as_string(a: usize, b: usize) -> PyResult<String> {
Ok((a + b).to_string())
}
#[pymodule]
fn string_sum(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(sum_as_string, m)?)?;
Ok(())
}
21.3 JavaScript互操作
使用Pyodide:
html复制<script type="module">
import { loadPyodide } from "https://cdn.jsdelivr.net/pyodide/v0.23.4/full/pyodide.js";
async function main() {
let pyodide = await loadPyodide();
console.log(pyodide.runPython("1 + 2"));
}
main();
</script>
22. 科学计算环境
22.1 基础栈安装
推荐使用conda:
bash复制conda create -n sci python=3.11 numpy scipy pandas matplotlib jupyter
22.2 性能关键库
- Numba加速:
python复制from numba import jit @jit(nopython=True) def monte_carlo_pi(nsamples): acc = 0 for _ in range(nsamples): x = random.random() y = random.random() if (x**2 + y**2) < 1.0: acc += 1 return 4.0 * acc / nsamples - 使用Dask处理大数据
22.3 可视化进阶
交互式可视化:
python复制import plotly.express as px
fig = px.scatter_3d(df, x='x', y='y', z='z', color='value')
fig.show()
23. Web开发环境
23.1 框架选择
- 全栈:Django
bash复制
pip install django django-admin startproject mysite - 轻量级:Flask
python复制from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello World!" - 异步:FastAPI
bash复制
pip install fastapi uvicorn uvicorn main:app --reload
23.2 ORM配置
SQLAlchemy示例:
python复制from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
engine = create_engine('sqlite:///users.db')
Base.metadata.create_all(engine)
23.3 现代化前端集成
使用htmx:
html复制<button hx-post="/clicked" hx-swap="outerHTML">
Click Me
</button>
24. 数据工程环境
24.1 工作流管理
使用Prefect:
python复制from prefect import flow, task
@task
def extract():
return [1, 2, 3]
@flow
def pipeline():
data = extract()
transform(data)
pipeline()
24.2 大数据处理
PySpark配置:
python复制from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Example") \
.getOrCreate()
df = spark.read.csv("data.csv")
24.3 流处理方案
使用Faust:
python复制import faust
app = faust.App('hello', broker='kafka://localhost')
greetings_topic = app.topic('greetings')
@app.agent(greetings_topic)
async def greet(greetings):
async for greeting in greetings:
print(f"Hello {greeting}!")
25. 机器学习环境
25.1 基础环境搭建
推荐conda环境:
bash复制conda create -n ml python=3.11
conda install -c conda-forge numpy scipy pandas scikit-learn matplotlib
pip install torch torchvision tensorflow
25.2 GPU支持验证
检查CUDA可用性:
python复制import torch
print(torch.cuda.is_available())
print(torch.backends.cudnn.enabled)
25.3 实验管理
使用MLflow:
python复制import mlflow
with mlflow.start_run():
mlflow.log_param("learning_rate", 0.01)
mlflow.log_metric("accuracy", 0.95)
mlflow.sklearn.log_model(model, "model")
26. 嵌入式Python
26.1 微控制器开发
使用MicroPython:
python复制from machine import Pin, PWM
import time
pwm = PWM(Pin(15))
pwm.freq(1000)
while True:
for duty in range(65025):
pwm.duty_u16(duty)
time.sleep_us(100)
26.2 性能优化技巧
- 使用@micropython.native装饰器
- 预编译为.mpy文件
- 避免动态属性访问
26.3 硬件接口示例
I2C通信:
python复制from machine import I2C, Pin
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)
devices = i2c.scan()
27. 游戏开发环境
27.1 Pygame基础
安装与示例:
bash复制pip install pygame
python复制import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.display.flip()
27.2 现代游戏引擎
Panda3D示例:
python复制from direct.showbase.ShowBase import ShowBase
class MyGame(ShowBase):
def __init__(self):
super().__init__()
self.cam.setPos(0, -10, 0)
game = MyGame()
game.run()
27.3 性能优化
- 使用Surface.convert()
- 批量绘制精灵
- 避免每帧创建新对象
28. 音视频处理
28.1 基础音频处理
使用pydub:
python复制from pydub import AudioSegment
song = AudioSegment.from_mp3("input.mp3")
song.export("output.wav", format="wav")
28.2 视频处理
使用OpenCV:
python复制import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
28.3 流媒体处理
使用FFmpeg-python:
python复制import ffmpeg
(
ffmpeg
.input('input.mp4')
.filter('scale', 1280, 720)
.output('output.mp4')
.run()
)
29. 自动化办公
29.1 Excel处理
使用openpyxl:
python复制from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws['A1'] = "Hello"
wb.save("test.xlsx")
29.2 PDF处理
使用PyPDF2:
python复制from PyPDF2 import PdfMerger
merger = PdfMerger()
merger.append("doc1.pdf")
merger.append("doc2.pdf")
merger.write("combined.pdf")
29.3 邮件自动化
使用smtplib:
python复制import smtplib
from email.mime.text import MIMEText
msg = MIMEText("邮件内容")
msg['Subject'] = '主题'
msg['From'] = 'from@example.com'
msg['To'] = 'to@example.com'
with smtplib.SMTP('smtp.example.com') as s:
s.send_message(msg)
30. 网络爬虫环境
30.1 基础爬虫
使用requests+BeautifulSoup:
python复制import requests
from bs4 import BeautifulSoup
resp = requests.get("https://example.com")
soup = BeautifulSoup(resp.text, 'html.parser')
print(soup.title.text)
30.2 高级爬虫
使用Scrapy:
bash复制pip install scrapy
scrapy startproject tutorial
python复制import scrapy
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['https://example.com']
def parse(self, response):
for title in response.css('.post-title'):
yield {'title': title.css('::text').get()}
30.3 反反爬策略
- 使用rotating user agents
- 设置合理延迟
- 使用selenium模拟浏览器
31. 区块链开发
31.1 Web3.py基础
python复制from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_PROJECT_ID'))
block = w3.eth.get_block('latest')
print(block.number)
31.2 智能合约交互
python复制contract = w3.eth.contract(
address='0x123...',
abi=[...]
)
print(contract.functions.balanceOf('0x456...').call())
31.3 本地测试链
使用Ganache:
bash复制pip install ganache
ganache-cli
32. 物联网应用
32.1 MQTT通信
使用paho-mqtt:
python复制import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("topic/test")
client = mqtt.Client()
client.on_connect = on_connect
client.connect("broker.hivemq.com", 1883, 60)
client.loop_forever()
32.2 传感器数据处理
python复制import board
import adafruit_dht
dht = adafruit_dht.DHT22(board.D4)
try:
temp = dht.temperature
humidity = dht.humidity
except RuntimeError as e:
print(e)
32.3 边缘计算
使用MicroPython:
python复制def process_sensor_data(values):
avg = sum(values) / len(values)
if avg > THRESHOLD:
publish_alert()
33. 金融分析环境
33.1 量化交易基础
使用backtrader:
python复制import backtrader as bt
class SmaCross(bt.SignalStrategy):
def __init__(self):
sma1 = bt.ind.SMA(period=10)
sma2 = bt.ind.SMA(period=30)
self.signal_add(bt.SIGNAL_LONG, sma1 > sma2)
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(dataname='AAPL')
cerebro.adddata(data)
cerebro.addstrategy(SmaCross)
cerebro.run()
33.2 风险管理
使用pyfolio:
python复制import pyfolio as pf
returns = strategy_returns
pf.create_full_tear_sheet(returns)
33.3 实时数据获取
使用yfinance:
python复制import yfinance as yf
data = yf.download("AAPL", start="2023-01-01", end="2023-06-30")
print(data.head())
34. 生物信息学
34.1 序列分析
使用Biopython:
python复制from Bio import SeqIO
for record in SeqIO.parse("sequence.fasta", "fasta"):
print(record.id, len(record))
34.2 蛋白质结构
使用MDAnalysis:
python复制import MDAnalysis as mda
u = mda.Universe("protein.pdb")
print(u.atoms.select_atoms("name CA"))
34.3 基因数据处理
使用pandas:
python复制import pandas as pd
df = pd.read_csv("gene_expression.csv", index_col=0)
normalized = df.apply(lambda x: x/x.max(), axis=1)
35. 地理信息系统
35.1 地图可视化
使用folium:
python复制import folium
m = folium.Map(location=[45.5236, -122.6750])
folium.Marker([45.5244, -122.6699], popup='Portland').add_to(m)
m.save('map.html')
35.2 空间分析
使用geopandas:
python复制import geopandas as gpd
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.plot(column='gdp_md_est', legend=True)
35.3 遥感数据处理
使用rasterio:
python复制import rasterio
with rasterio.open('image.tif') as src:
print(src.profile)
band1 = src.read(1)
36. 计算机视觉
36.1 基础图像处理
使用Pillow:
python复制from PIL import Image, ImageFilter
im = Image.open("input.jpg")
im.filter(ImageFilter.GaussianBlur(2)).save("output.jpg")
36.2 目标检测
使用OpenCV:
python复制import cv2
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
36.3 深度学习模型
使用torchvision:
python复制import torchvision.models as models
resnet = models.resnet50(pretrained=True)
37. 自然语言处理
37.1 文本处理
使用spaCy:
python复制import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for ent in doc.ents:
print(ent.text, ent.label_)
37.2 情感分析
使用transformers:
python复制from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("I love this movie!")
print(result)
37.3 文本生成
使用GPT模型:
python复制from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
inputs = tokenizer.encode("Once upon a time", return_tensors="pt")
outputs = model.generate(inputs, max_length=50)
print(tokenizer.decode(outputs[0]))
38. 强化学习
38.1 基础环境
使用gym:
python复制import gym
env = gym.make("CartPole-v1")
observation = env.reset()
for _ in range(1000):
env.render()
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
observation = env.reset()
env.close()
38.2 深度Q学习
使用stable-baselines3:
python复制from stable_baselines3 import DQN
model = DQN("MlpPolicy", "CartPole-v1", verbose=1)
model.learn(total_timesteps=10000)
38.3 多智能体系统
使用PettingZoo:
python复制from pettingzoo.butterfly import pistonball_v6
env = pistonball_v6.env()
env.reset()
for agent in env.agent_iter():
observation, reward, done, info = env.last()
action = policy(observation)
env.step(action)
39. 元编程技巧
39.1 装饰器进阶
带参数的装饰器:
python复制def repeat(num):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(num):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"Hello {name}")
greet("World")
39.2 元类应用
python复制class Meta(type):
def __new__(cls, name, bases, namespace):
namespace['created_by'] = 'metaclass'
return super().__new__(cls, name, bases, namespace)
class MyClass(metaclass=Meta):
pass
print(MyClass.created_by) # 'metaclass'
39.3 动态属性
使用__getattr__:
python复制class DynamicAttributes:
def __getattr__(self, name):
if name.startswith('dynamic_
