1. Python补充指南:从基础到进阶的实用技巧
作为一名使用Python近十年的开发者,我经常遇到同行们提出的各种Python相关问题。有些问题看似简单却隐藏着深层的原理,有些技巧看似复杂却能大幅提升开发效率。这篇文章将分享那些官方文档不会告诉你的实战经验,涵盖从基础语法到高级特性的全方位知识补充。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Python核心语法精要
2.1 变量与数据类型的深层理解
Python的变量远不止表面看起来那么简单。比如这个常见但容易误解的例子:
python复制a = 256
b = 256
a is b # 返回True
x = 257
y = 257
x is y # 可能返回False
这是因为Python对小整数(-5到256)进行了缓存优化。理解这些底层机制能避免很多隐蔽的bug。
重要提示:判断对象相等时,==比较值,is比较内存地址。在大多数情况下应该使用==。
2.2 列表推导式的进阶用法
列表推导式不只是简化循环的工具,合理使用能显著提升性能:
python复制# 传统方式
result = []
for i in range(100):
if i % 2 == 0:
result.append(i**2)
# 列表推导式
result = [i**2 for i in range(100) if i % 2 == 0]
更复杂的嵌套推导式:
python复制matrix = [[1,2,3], [4,5,6], [7,8,9]]
flatten = [num for row in matrix for num in row]
3. 函数与面向对象编程的实战技巧
3.1 装饰器的原理与应用
装饰器是Python最强大的特性之一。理解其本质很重要:
python复制def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before function call")
result = func(*args, **kwargs)
print("After function call")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
实际应用场景:
- 日志记录
- 性能测试
- 权限验证
- 缓存处理
3.2 类与元编程技巧
Python的类机制非常灵活。比如使用__slots__优化内存:
python复制class Person:
__slots__ = ['name', 'age']
def __init__(self, name, age):
self.name = name
self.age = age
这可以显著减少内存占用,特别适合创建大量实例的情况。
4. Python性能优化实战
4.1 选择正确的数据结构
不同操作的性能对比:
| 操作 | 列表 | 集合 | 字典 |
|---|---|---|---|
| 查找元素 | O(n) | O(1) | O(1) |
| 插入元素 | O(1) | O(1) | O(1) |
| 删除元素 | O(n) | O(1) | O(1) |
4.2 使用生成器处理大数据
生成器能有效节省内存:
python复制def read_large_file(file_path):
with open(file_path, 'r') as f:
for line in f:
yield line
# 使用方式
for line in read_large_file('huge_file.txt'):
process(line)
5. 常用标准库的隐藏功能
5.1 collections模块的高级容器
defaultdict的妙用:
python复制from collections import defaultdict
word_counts = defaultdict(int)
for word in words:
word_counts[word] += 1
Counter类的统计功能:
python复制from collections import Counter
c = Counter('abracadabra')
print(c.most_common(3)) # [('a', 5), ('b', 2), ('r', 2)]
5.2 itertools的高效迭代
无限迭代器示例:
python复制import itertools
# 无限计数器
for i in itertools.count(10):
if i > 20: break
print(i)
# 循环迭代
for item in itertools.cycle(['a', 'b', 'c']):
# 会无限循环,需要设置退出条件
pass
6. 异步编程实战指南
6.1 asyncio核心概念
基本协程示例:
python复制import asyncio
async def fetch_data():
print("开始获取数据")
await asyncio.sleep(2)
print("数据获取完成")
return {'data': 1}
async def main():
task = asyncio.create_task(fetch_data())
print("等待任务完成")
await task
print(f"获取到的数据: {task.result()}")
asyncio.run(main())
6.2 异步上下文管理器
使用async with管理资源:
python复制class AsyncConnection:
async def __aenter__(self):
print("建立连接")
return self
async def __aexit__(self, exc_type, exc, tb):
print("关闭连接")
async def use_connection():
async with AsyncConnection() as conn:
print("使用连接中")
7. 调试与性能分析技巧
7.1 使用pdb进行调试
基本调试命令示例:
python复制import pdb
def buggy_function(x, y):
result = x + y
pdb.set_trace() # 设置断点
return result * 2
buggy_function(3, 4)
常用pdb命令:
- n(ext): 执行下一行
- c(ontinue): 继续执行直到下一个断点
- l(ist): 显示当前代码
- p: 打印变量值
- q(uit): 退出调试
7.2 使用cProfile分析性能
性能分析示例:
python复制import cProfile
def slow_function():
total = 0
for i in range(100000):
total += i
return total
cProfile.run('slow_function()')
分析结果会显示每个函数的调用次数和执行时间,帮助定位性能瓶颈。
8. Python与其他语言的交互
8.1 使用ctypes调用C函数
简单示例:
c复制// testlib.c
#include <stdio.h>
void hello_from_c() {
printf("Hello from C!\n");
}
编译为共享库后:
python复制from ctypes import CDLL
lib = CDLL('./testlib.so')
lib.hello_from_c()
8.2 使用subprocess调用系统命令
安全执行系统命令:
python复制import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
重要提示:永远不要直接拼接用户输入作为命令参数,这会导致命令注入漏洞。
9. 现代Python开发工具链
9.1 虚拟环境管理
使用venv创建隔离环境:
bash复制python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
9.2 使用poetry管理依赖
poetry的基本用法:
bash复制poetry init
poetry add requests
poetry install
poetry.lock文件能确保所有开发者使用完全相同的依赖版本。
10. Python类型提示实战
10.1 基本类型注解
函数类型提示示例:
python复制def greet(name: str) -> str:
return f"Hello, {name}"
Vector = list[float]
def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector]
10.2 使用mypy进行静态检查
安装和使用:
bash复制pip install mypy
mypy your_script.py
这能在运行前捕获许多类型相关的错误。
11. 测试驱动开发实践
11.1 使用pytest编写测试
基本测试示例:
python复制# test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 4
运行测试:
bash复制pytest test_sample.py
11.2 高级测试技巧
使用fixture共享测试资源:
python复制import pytest
@pytest.fixture
def database():
db = setup_database()
yield db
teardown_database(db)
def test_query(database):
result = database.query("SELECT 1")
assert result == 1
12. Python打包与分发
12.1 创建可安装的包
基本项目结构:
code复制my_package/
├── setup.py
├── my_package/
│ ├── __init__.py
│ └── module.py
setup.py示例:
python复制from setuptools import setup
setup(
name="my_package",
version="0.1",
packages=["my_package"],
)
安装开发模式:
bash复制pip install -e .
12.2 构建wheel分发
创建wheel文件:
bash复制python setup.py bdist_wheel
这会生成.whl文件,可以方便地分发给其他用户。
13. Python安全编程实践
13.1 常见安全漏洞防范
SQL注入防护:
python复制# 错误方式 - 易受攻击
query = f"SELECT * FROM users WHERE name = '{username}'"
# 正确方式 - 使用参数化查询
cursor.execute("SELECT * FROM users WHERE name = %s", (username,))
13.2 密码安全处理
使用hashlib安全存储密码:
python复制import hashlib
import os
def hash_password(password):
salt = os.urandom(32)
key = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
100000
)
return salt + key
14. Python并发编程模式
14.1 线程与进程的选择
何时使用线程:
- I/O密集型任务
- 需要共享内存
- 快速启动需求
何时使用进程:
- CPU密集型任务
- 需要隔离性
- 利用多核优势
14.2 使用concurrent.futures
线程池示例:
python复制from concurrent.futures import ThreadPoolExecutor
def process_item(item):
# 处理单个项目
return item * 2
with ThreadPoolExecutor(max_workers=4) as executor:
results = list(executor.map(process_item, range(10)))
15. Python与数据科学
15.1 使用pandas高效处理数据
避免逐行处理:
python复制# 低效方式
for index, row in df.iterrows():
df.at[index, 'new_col'] = row['col1'] * 2
# 高效方式
df['new_col'] = df['col1'] * 2
15.2 使用numpy向量化运算
传统循环 vs 向量化:
python复制import numpy as np
# 传统方式
a = [1,2,3,4]
b = [5,6,7,8]
result = []
for x, y in zip(a, b):
result.append(x + y)
# numpy方式
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
result = a + b
16. Python Web开发要点
16.1 Flask高效路由
使用蓝图组织大型应用:
python复制from flask import Blueprint
auth = Blueprint('auth', __name__)
@auth.route('/login')
def login():
return "Login page"
# 在主应用中注册
app.register_blueprint(auth, url_prefix='/auth')
16.2 Django ORM优化
避免N+1查询问题:
python复制# 低效方式 - 产生N+1查询
books = Book.objects.all()
for book in books:
print(book.author.name) # 每次循环都查询作者
# 高效方式 - 使用select_related
books = Book.objects.select_related('author').all()
for book in books:
print(book.author.name) # 预先加载作者
17. Python与机器学习
17.1 使用scikit-learn构建管道
完整机器学习流程:
python复制from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pipe = Pipeline([
('scaler', StandardScaler()),
('classifier', SVC())
])
pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)
17.2 特征工程技巧
分类特征编码:
python复制import pandas as pd
from sklearn.preprocessing import OneHotEncoder
df = pd.DataFrame({'color': ['red', 'blue', 'green']})
encoder = OneHotEncoder(sparse=False)
encoded = encoder.fit_transform(df[['color']])
18. Python代码质量保障
18.1 使用flake8进行代码检查
安装与使用:
bash复制pip install flake8
flake8 your_script.py
检查内容包括:
- PEP8风格违规
- 语法错误
- 未使用的变量/导入
- 其他潜在问题
18.2 代码格式化工具
使用black自动格式化:
bash复制pip install black
black your_script.py
black采用"不妥协"的代码格式化方式,确保团队代码风格一致。
19. Python调试高级技巧
19.1 使用logging进行调试
配置日志系统:
python复制import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='app.log'
)
logger = logging.getLogger(__name__)
logger.debug('This is a debug message')
19.2 异常处理最佳实践
捕获特定异常:
python复制try:
result = 10 / 0
except ZeroDivisionError as e:
logger.error(f"Division by zero: {e}")
raise CustomError("Math error occurred") from e
使用raise from保留原始异常堆栈。
20. Python元编程进阶
20.1 动态创建类
使用type动态创建类:
python复制MyClass = type('MyClass', (), {'x': 10, 'say_hello': lambda self: "Hello"})
obj = MyClass()
print(obj.x) # 10
print(obj.say_hello()) # "Hello"
20.2 描述符协议
实现属性访问控制:
python复制class PositiveNumber:
def __set_name__(self, owner, name):
self.name = name
def __get__(self, obj, objtype=None):
return obj.__dict__[self.name]
def __set__(self, obj, value):
if value <= 0:
raise ValueError("必须是正数")
obj.__dict__[self.name] = value
class Order:
quantity = PositiveNumber()
order = Order()
order.quantity = 10 # 正常
order.quantity = -5 # 抛出ValueError
21. Python与数据库交互
21.1 SQLAlchemy核心用法
声明式模型定义:
python复制from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///mydatabase.db')
Base.metadata.create_all(engine)
21.2 异步数据库访问
使用asyncpg连接PostgreSQL:
python复制import asyncpg
async def fetch_data():
conn = await asyncpg.connect('postgresql://user:pass@localhost/db')
result = await conn.fetch('SELECT * FROM users')
await conn.close()
return result
22. Python设计模式实现
22.1 单例模式实现
使用模块实现单例:
python复制# singleton.py
class _Singleton:
def __init__(self):
self.value = None
instance = _Singleton()
def get_instance():
return instance
# 使用方式
from singleton import get_instance
s1 = get_instance()
s2 = get_instance()
assert s1 is s2 # True
22.2 观察者模式实现
简单观察者实现:
python复制class Observable:
def __init__(self):
self._observers = []
def register(self, observer):
self._observers.append(observer)
def notify(self, *args, **kwargs):
for observer in self._observers:
observer(*args, **kwargs)
def observer_function(message):
print(f"收到消息: {message}")
observable = Observable()
observable.register(observer_function)
observable.notify("测试消息")
23. Python与网络编程
23.1 使用socket创建TCP服务器
基本TCP服务器:
python复制import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('localhost', 65432))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
23.2 使用requests处理HTTP请求
高级请求示例:
python复制import requests
session = requests.Session()
session.headers.update({'User-Agent': 'MyApp/1.0'})
try:
response = session.get(
'https://api.example.com/data',
params={'page': 1},
timeout=5
)
response.raise_for_status()
data = response.json()
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
24. Python与GUI开发
24.1 Tkinter基础应用
简单GUI示例:
python复制import tkinter as tk
from tkinter import messagebox
def on_click():
messagebox.showinfo("提示", f"你好, {entry.get()}!")
root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="问候", command=on_click)
button.pack()
root.mainloop()
24.2 使用PyQt构建现代界面
PyQt基础窗口:
python复制from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
app = QApplication([])
window = QMainWindow()
window.setWindowTitle("我的应用")
label = QLabel("Hello, PyQt!", parent=window)
window.setCentralWidget(label)
window.show()
app.exec_()
25. Python与系统管理
25.1 文件系统操作
递归遍历目录:
python复制import os
for root, dirs, files in os.walk('/path/to/directory'):
for file in files:
path = os.path.join(root, file)
print(path)
25.2 进程管理
获取系统进程信息:
python复制import psutil
for proc in psutil.process_iter(['pid', 'name', 'username']):
print(proc.info)
26. Python与正则表达式
26.1 常用正则模式
提取电子邮件:
python复制import re
text = "联系我:user@example.com 或 support@test.org"
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print(emails) # ['user@example.com', 'support@test.org']
26.2 命名捕获组
使用命名组提高可读性:
python复制pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
match = re.search(pattern, '2023-05-15')
if match:
print(match.group('year')) # 2023
print(match.groupdict()) # {'year': '2023', 'month': '05', 'day': '15'}
27. Python与日期时间处理
27.1 时区处理
正确处理时区:
python复制from datetime import datetime
import pytz
utc = pytz.utc
local_tz = pytz.timezone('Asia/Shanghai')
utc_time = datetime.now(utc)
local_time = utc_time.astimezone(local_tz)
print(local_time)
27.2 时间差计算
计算时间间隔:
python复制from datetime import datetime, timedelta
start = datetime(2023, 1, 1)
end = datetime(2023, 1, 15)
delta = end - start
print(delta.days) # 14
# 添加时间差
new_date = start + timedelta(days=30)
print(new_date) # 2023-01-31
28. Python与办公自动化
28.1 处理Excel文件
使用openpyxl:
python复制from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws['A1'] = "Hello"
ws['B1'] = "World"
wb.save('example.xlsx')
28.2 生成PDF报告
使用reportlab:
python复制from reportlab.pdfgen import canvas
c = canvas.Canvas("hello.pdf")
c.drawString(100, 750, "Welcome to ReportLab!")
c.save()
29. Python与图像处理
29.1 使用Pillow处理图像
基本图像操作:
python复制from PIL import Image, ImageFilter
img = Image.open('photo.jpg')
gray = img.convert('L')
blur = img.filter(ImageFilter.BLUR)
blur.save('blurred.jpg')
29.2 生成验证码图片
创建简单验证码:
python复制from PIL import Image, ImageDraw, ImageFont
import random
def generate_captcha(text, filename):
img = Image.new('RGB', (200, 80), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('arial.ttf', 36)
for i, char in enumerate(text):
draw.text((50*i + 10, 20), char, fill=(0, 0, 0), font=font)
img.save(filename)
generate_captcha('ABCD', 'captcha.png')
30. Python与网络爬虫
30.1 使用BeautifulSoup解析HTML
提取网页数据:
python复制from bs4 import BeautifulSoup
import requests
html = requests.get('https://example.com').text
soup = BeautifulSoup(html, 'html.parser')
for link in soup.find_all('a'):
print(link.get('href'))
30.2 使用Scrapy构建爬虫
简单Scrapy爬虫:
python复制import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://quotes.toscrape.com']
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
}
31. Python与API开发
31.1 FastAPI快速入门
创建API端点:
python复制from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
31.2 使用Swagger文档
FastAPI自动生成的交互式文档可以通过访问/docs路径查看,无需额外配置。
32. Python与微服务
32.1 使用gRPC创建服务
定义proto文件后:
python复制# server.py
import grpc
from concurrent import futures
import my_service_pb2
import my_service_pb2_grpc
class MyService(my_service_pb2_grpc.MyServiceServicer):
def SayHello(self, request, context):
return my_service_pb2.HelloReply(message=f'Hello, {request.name}!')
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
my_service_pb2_grpc.add_MyServiceServicer_to_server(MyService(), server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
33. Python与区块链
33.1 简单区块链实现
区块类示例:
python复制import hashlib
import json
from time import time
class Block:
def __init__(self, index, transactions, timestamp, previous_hash):
self.index = index
self.transactions = transactions
self.timestamp = timestamp
self.previous_hash = previous_hash
self.hash = self.compute_hash()
def compute_hash(self):
block_string = json.dumps(self.__dict__, sort_keys=True)
return hashlib.sha256(block_string.encode()).hexdigest()
34. Python与物联网
34.1 使用MQTT协议
发布消息示例:
python复制import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("mqtt.eclipse.org", 1883, 60)
client.publish("topic/test", "Hello, MQTT!")
client.disconnect()
35. Python与游戏开发
35.1 使用Pygame创建游戏
简单游戏循环:
python复制import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("我的游戏")
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
pygame.display.flip()
pygame.quit()
36. Python与音频处理
36.1 使用pydub处理音频
基本操作:
python复制from pydub import AudioSegment
sound = AudioSegment.from_file("input.mp3")
sound = sound + 10 # 增加10dB
sound.export("output.mp3", format="mp3")
37. Python与视频处理
37.1 使用OpenCV处理视频
读取视频帧:
python复制import cv2
cap = cv2.VideoCapture('video.mp4')
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
38. Python与3D图形
38.1 使用matplotlib绘制3D图
3D散点图示例:
python复制import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
plt.show()
39. Python与地理信息系统
39.1 使用geopandas处理地理数据
读取shapefile:
python复制import geopandas as gpd
gdf = gpd.read_file('shapefile.shp')
gdf.plot()
40. Python与自然语言处理
40.1 使用NLTK进行文本处理
分词和词性标注:
python复制import nltk
from nltk.tokenize import word_tokenize
from nltk import pos_tag
text = "Python is a great programming language."
tokens = word_tokenize(text)
tags = pos_tag(tokens)
print(tags)
40.2 使用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_)
41. Python与推荐系统
41.1 协同过滤实现
基于用户的协同过滤:
python复制from collections import defaultdict
import numpy as np
def cosine_similarity(u, v):
return np.dot(u, v) / (np.linalg.norm(u) * np.linalg.norm(v))
user_ratings = {
'Alice': {'Item1': 5, 'Item2': 3},
'Bob': {'Item1': 4, 'Item2': 2, 'Item3': 5},
'Charlie': {'Item2': 5, 'Item3': 4}
}
def recommend(user, ratings):
scores = defaultdict(float)
for other_user in ratings:
if other_user == user:
continue
# 计算用户相似度
common_items = set(ratings[user]) & set(ratings[other_user])
if not common_items:
continue
user_vec = [ratings[user][item] for item in common_items]
other_vec = [ratings[other_user][item] for item in common_items]
sim = cosine_similarity(user_vec, other_vec)
# 加权评分
for item in ratings[other_user]:
if item not in ratings[user]:
scores[item] += ratings[other_user][item] * sim
return sorted(scores.items(), key=lambda x: x[1], reverse=True)
print(recommend('Alice', user_ratings))
42. Python与金融分析
42.1 计算投资组合收益
简单投资组合分析:
python复制import numpy as np
import pandas as pd
returns = pd.DataFrame({
'StockA': [0.02, 0.01, -0.005, 0.015],
'StockB': [0.03, -0.01, 0.02, 0.01],
'StockC': [-0.01, 0.02, 0.015, 0.005]
})
weights = np.array([0.4, 0.3, 0.3])
portfolio_returns = (returns * weights).sum(axis=1)
print(portfolio_returns)
42.2 计算移动平均线
使用pandas计算:
python复制import yfinance as yf
data = yf.download('AAPL', start='2022-01-01', end='2023-01-01')
data['MA50'] = data['Close'].rolling(window=50).mean()
data['MA200'] = data['Close'].rolling(window=200).mean()
print(data[['Close', 'MA50', 'MA200']].tail())
43. Python与量化交易
43.1 回测框架示例
简单回测逻辑:
python复制import pandas as pd
def backtest(data, strategy):
position = 0
portfolio = pd.DataFrame(index=data.index)
portfolio['signal'] = strategy(data)
portfolio['returns'] = data['Close'].pct_change()
portfolio['strategy'] = portfolio['signal'].shift() * portfolio['returns']
return portfolio
def moving_average_crossover(data):
short_ma = data['Close'].rolling(window=10).mean()
long_ma = data['Close'].rolling(window=50).mean()
return (short_ma > long_ma).astype(int)
# 使用示例
data = pd.read_csv('stock_data.csv', parse_dates=['Date'], index_col='Date')
results = backtest(data, moving_average_crossover)
print(results.head())
44. Python与生物信息学
44.1 DNA序列处理
计算GC含量:
python复制def gc_content(sequence):
gc = sequence.count('G') + sequence.count('C')
return gc / len(sequence) * 100
dna = "ATGCGATACGCTTGA"
print(f"GC含量: {gc_content(dna):.2f}%")
45. Python与物理模拟
45.1 简单物理引擎
模拟自由落体:
python复制import matplotlib.pyplot as plt
g = 9.8 # 重力加速度
dt = 0.01 # 时间步长
time = 0
height = 100 # 初始高度
velocity = 0 # 初始速度
times = []
heights = []
while height > 0:
velocity += g * dt
height -= velocity * dt
time += dt
times.append(time)
heights.append(height)
plt.plot(times, heights)
plt.xlabel('时间 (s)')
plt.ylabel('高度 (m)')
plt.title('自由落体模拟')
plt.show()
46. Python与化学计算
46.1 化学方程式平衡
使用sympy平衡方程:
python复制from sympy import symbols, Eq, solve
C, O2, CO2 = symbols('C O2 CO2')
equation = Eq(C + O2, CO2)
print(equation) # 已经平衡
47. Python与密码学
47.1 AES加密实现
使用PyCryptodome:
python复制from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
data = b"Secret message"
ciphertext, tag = cipher.encrypt_and_digest(data)
# 解密
cipher = AES.new(key, AES.MODE_EAX, cipher.nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
print(plaintext)
48. Python与硬件交互
48.1 使用RPi.GPIO控制树莓派
控制LED示例:
python复制import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
try:
while True:
GPIO.output(18, GPIO.HIGH)
time.sleep(1)
GPIO.output(18, GPIO.LOW)
time.sleep(1)
finally:
GPIO.cleanup()
49. Python与自动化测试
49.1 使用Selenium进行Web测试
自动化浏览器测试:
python复制from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.example.com")
element = driver.find_element(By.TAG_NAME, "h1")
print(element.text)
driver.quit()
50. Python与Docker集成
50.1 使用docker-py管理容器
列出运行中的容器:
python复制import docker
client = docker.from_env()
for container in client.containers.list():
print(container.name)
50.2 构建Docker镜像
通过Python构建:
python复制import docker
client = docker.from_env()
client.images.build(path='.', tag='my-image')
51. Python与Kubernetes交互
51.1 使用kubernetes-client
获取Pod信息:
python复制from kubernetes import client,
