找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

481

积分

1

好友

55

主题
发表于 2025-11-28 02:09:42 | 查看: 12| 回复: 0

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)



上一篇:Spring Boot集成Apache Doris实战:实时分析性能优化与MySQL替代方案
下一篇:后端开发高效工具实战:7个低调利器助力云原生与数据库操作
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 04:53 , Processed in 0.120699 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表