在Python开发中,使用标准化的代码模板可以显著提高开发效率和代码质量。以下是15个实用的Python开发模板,每个模板都配有说明和原创代码示例。
1. 简单脚本模板
说明:适用于快速编写独立运行的Python脚本,确保代码在直接执行时才会运行主函数。
#!/usr/bin/env python3
import sys
def process_data(input_data):
"""处理输入数据的核心逻辑"""
return input_data.upper()
def main():
if len(sys.argv) > 1:
data = sys.argv
result = process_data(data)
print(f"处理结果: {result}")
else:
print("请输入要处理的参数")
if __name__ == "__main__":
main()
2. 类定义模板
说明:标准的类定义结构,包含初始化方法和实例方法。
class Student:
def __init__(self, name, age, grade):
self.name = name
self.age = age
self.grade = grade
def get_info(self):
return f"学生{self.name}, 年龄{self.age}, 成绩{self.grade}"
def update_grade(self, new_grade):
self.grade = new_grade
# 使用示例
student = Student("张三", 18, 85)
print(student.get_info())
3. 函数定义模板
说明:包含类型提示和文档字符串的函数定义规范。
from typing import List
def calculate_average(numbers: List[float]) -> float:
"""
计算数字列表的平均值
Args:
numbers: 包含数字的列表
Returns:
数字的平均值
"""
if not numbers:
return 0.0
return sum(numbers) / len(numbers)
# 使用示例
scores = [90.5, 85.0, 92.5, 88.0]
avg_score = calculate_average(scores)
print(f"平均分: {avg_score:.2f}")
4. 单元测试模板
说明:使用pytest框架的测试模板,更简洁的测试语法。
import pytest
def multiply(a: int, b: int) -> int:
return a * b
class TestMathOperations:
def test_multiply_positive_numbers(self):
assert multiply(3, 4) == 12
def test_multiply_with_zero(self):
assert multiply(5, 0) == 0
def test_multiply_negative_numbers(self):
assert multiply(-2, 3) == -6
if __name__ == "__main__":
pytest.main([__file__])
5. 上下文管理器模板
说明:自定义上下文管理器,用于资源管理。
class Timer:
def __init__(self, operation_name):
self.operation_name = operation_name
self.start_time = None
def __enter__(self):
import time
self.start_time = time.time()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
import time
elapsed = time.time() - self.start_time
print(f"{self.operation_name} 耗时: {elapsed:.2f}秒")
# 使用示例
with Timer("数据计算"):
total = sum(range(1000000))
print(f"计算结果: {total}")
6. 装饰器模板
说明:函数装饰器的标准实现模式。
import functools
import time
def retry(max_attempts=3, delay=1):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception as e:
if attempt == max_attempts - 1:
raise e
time.sleep(delay)
return None
return wrapper
return decorator
@retry(max_attempts=3)
def unreliable_operation():
import random
if random.random() < 0.7:
raise ValueError("操作失败")
return "成功"
print(unreliable_operation())
7. 生成器模板
说明:使用生成器处理大数据集的模板。
def batch_processor(data, batch_size=100):
"""
分批处理数据的生成器
Args:
data: 可迭代的数据集
batch_size: 每批的大小
"""
batch = []
for item in data:
batch.append(item)
if len(batch) >= batch_size:
yield batch
batch = []
if batch:
yield batch
# 使用示例
large_dataset = range(1, 1001)
for i, batch in enumerate(batch_processor(large_dataset, 50)):
print(f"批次 {i+1}: 处理 {len(batch)} 条数据")
8. 数据类模板
说明:使用dataclass简化类定义。
from dataclasses import dataclass, field
from typing import List
@dataclass
class Product:
name: str
price: float
tags: List[str] = field(default_factory=list)
def apply_discount(self, discount_percent: float):
self.price *= (1 - discount_percent / 100)
# 使用示例
product = Product("笔记本电脑", 5999.0, ["电子", "办公"])
product.apply_discount(10)
print(f"折后价格: {product.price}")
9. 异步编程模板
说明:使用asyncio进行异步编程的模板。
import asyncio
async def fetch_data(url: str, delay: int):
"""模拟异步获取数据"""
await asyncio.sleep(delay)
return f"从 {url} 获取的数据"
async def main():
tasks = [
fetch_data("https://api.example.com/data1", 2),
fetch_data("https://api.example.com/data2", 1),
fetch_data("https://api.example.com/data3", 3)
]
results = await asyncio.gather(*tasks)
for result in results:
print(result)
# 运行异步程序
asyncio.run(main())
10. 日志配置模板
说明:标准化的日志配置和使用。
import logging
import logging.config
def setup_logging():
logging.config.dictConfig({
'version': 1,
'formatters': {
'detailed': {
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'detailed',
'level': 'INFO'
}
},
'root': {
'level': 'DEBUG',
'handlers': ['console']
}
})
# 使用示例
setup_logging()
logger = logging.getLogger(__name__)
logger.info("程序开始运行")
logger.error("这是一个错误信息")
11. 配置文件读取模板
说明:使用configparser读取配置文件的模板。
import configparser
def load_config(config_path='config.ini'):
config = configparser.ConfigParser()
config.read(config_path)
return {
'database': {
'host': config.get('database', 'host', fallback='localhost'),
'port': config.getint('database', 'port', fallback=5432),
'name': config.get('database', 'name')
},
'api': {
'key': config.get('api', 'key'),
'timeout': config.getint('api', 'timeout', fallback=30)
}
}
# 假设config.ini文件存在
config = load_config()
print(f"数据库主机: {config['database']['host']}")
12. 命令行参数解析模板
说明:使用argparse解析命令行参数。
import argparse
def create_parser():
parser = argparse.ArgumentParser(description='数据处理工具')
parser.add_argument('input_file', help='输入文件路径')
parser.add_argument('-o', '--output', help='输出文件路径')
parser.add_argument('--verbose', action='store_true', help='详细输出模式')
parser.add_argument('--count', type=int, default=1, help='处理次数')
return parser
if __name__ == "__main__":
parser = create_parser()
args = parser.parse_args()
print(f"输入文件: {args.input_file}")
print(f"输出文件: {args.output}")
print(f"详细模式: {args.verbose}")
print(f"处理次数: {args.count}")
13. 数据库操作模板
说明:使用SQLite进行数据库操作的模板。
import sqlite3
from contextlib import contextmanager
@contextmanager
def get_db_connection(db_path):
conn = sqlite3.connect(db_path)
try:
yield conn
finally:
conn.close()
def initialize_database():
with get_db_connection('example.db') as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
)
''')
conn.commit()
def add_user(name, email):
with get_db_connection('example.db') as conn:
conn.execute('INSERT INTO users (name, email) VALUES (?, ?)', (name, email))
conn.commit()
# 使用示例
initialize_database()
add_user("李四", "lisi@example.com")
14. 数据验证模板
说明:使用pydantic进行数据验证。
from pydantic import BaseModel, ValidationError, validator
from typing import Optional
class UserRegistration(BaseModel):
username: str
email: str
age: int
password: str
@validator('username')
def username_must_contain_letters(cls, v):
if not any(c.isalpha() for c in v):
raise ValueError('用户名必须包含字母')
return v
@validator('age')
def age_must_be_positive(cls, v):
if v <= 0:
raise ValueError('年龄必须为正数')
return v
# 使用示例
try:
user_data = {
'username': 'john123',
'email': 'john@example.com',
'age': 25,
'password': 'securepassword'
}
user = UserRegistration(**user_data)
print(f"验证成功: {user.username}")
except ValidationError as e:
print(f"验证错误: {e}")
15. Web API模板
说明:使用Flask创建简单Web API的模板。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/users', methods=['GET'])
def get_users():
users = [
{'id': 1, 'name': 'Alice', 'email': 'alice@example.com'},
{'id': 2, 'name': 'Bob', 'email': 'bob@example.com'}
]
return jsonify(users)
@app.route('/api/users', methods=['POST'])
def create_user():
data = request.get_json()
# 在实际应用中这里会有数据验证和数据库操作
return jsonify({'message': '用户创建成功', 'user': data}), 201
if __name__ == '__main__':
app.run(debug=True)