当前位置: 首页 > wzjs >正文

中国十大网站建设广告公司网站制作

中国十大网站建设,广告公司网站制作,网站页面构架,小型工作室创业项目Python语法糖教程第2天—Python装饰器深度解析与高阶应用指南 一、装饰器本质揭秘 1.1 装饰器的运行时序 def decorator(func):print("装饰器初始化阶段")def wrapper(*args, **kwargs):print("函数执行前操作")result func(*args, **kwargs)print(&qu…

Python语法糖教程第2天—Python装饰器深度解析与高阶应用指南

一、装饰器本质揭秘

1.1 装饰器的运行时序

def decorator(func):print("装饰器初始化阶段")def wrapper(*args, **kwargs):print("函数执行前操作")result = func(*args, **kwargs)print("函数执行后操作")return resultreturn wrapper@decorator  # 此处立即执行装饰器函数
def target_function():print("核心业务逻辑")"""
输出:
装饰器初始化阶段
"""

1.2 装饰器等效原理

# @decorator 语法糖等效于
target_function = decorator(target_function)

1.3 装饰器执行流程图

函数定义
立即调用装饰器
返回包装函数
调用被装饰函数
执行包装逻辑

二、装饰器分类体系

2.1 函数装饰器

基础模板:

def simple_decorator(func):def wrapper(*args, **kwargs):# 前置处理result = func(*args, **kwargs)# 后置处理return resultreturn wrapper

2.2 类装饰器

实现原理:

class ClassDecorator:def __init__(self, func):self.func = funcdef __call__(self, *args, **kwargs):print(f"调用 {self.func.__name__}")return self.func(*args, **kwargs)@ClassDecorator
def example():pass

2.3 参数化装饰器

三层嵌套结构:

def repeat(times):def outer_wrapper(func):def inner_wrapper(*args, **kwargs):for _ in range(times):result = func(*args, **kwargs)return resultreturn inner_wrapperreturn outer_wrapper@repeat(3)
def greet(name):print(f"Hello {name}")greet("World")
"""
输出:
Hello World
Hello World
Hello World
"""

三、元编程进阶技巧

3.1 保留元数据

from functools import wrapsdef meta_decorator(func):@wraps(func)  # 保留原始函数信息def wrapper(*args, **kwargs):return func(*args, **kwargs)return wrapper

3.2 装饰器堆叠

@decorator1
@decorator2
@decorator3
def multi_decorated():pass# 等效于 decorator1(decorator2(decorator3(func)))

3.3 装饰器状态保持

def counter_decorator(func):def wrapper(*args, **kwargs):wrapper.calls += 1print(f"第{wrapper.calls}次调用")return func(*args, **kwargs)wrapper.calls = 0return wrapper

四、典型应用场景

4.1 权限控制装饰器

def require_role(role):def decorator(func):@wraps(func)def wrapper(user, *args, **kwargs):if user.role != role:raise PermissionError("权限不足")return func(user, *args, **kwargs)return wrapperreturn decorator@require_role('admin')
def delete_user(user):print(f"删除用户 {user.name}")

4.2 异步函数装饰器

import asynciodef async_timer(func):@wraps(func)async def wrapper(*args, **kwargs):start = time.time()result = await func(*args, **kwargs)print(f"耗时 {time.time()-start:.2f}s")return resultreturn wrapper@async_timer
async def fetch_data():await asyncio.sleep(1)return "数据获取成功"

4.3 类方法装饰器

def class_decorator(method):def wrapper(self, *args, **kwargs):print(f"调用 {self.__class__.__name__} 的方法")return method(self, *args, **kwargs)return wrapperclass MyClass:@class_decoratordef show(self):print("实例方法被调用")

五、调试与优化策略

5.1 调试技巧

import inspectdef debug_decorator(func):@wraps(func)def wrapper(*args, **kwargs):print(f"输入参数: {inspect.signature(func)}")print(f"实际参数: args={args}, kwargs={kwargs}")result = func(*args, **kwargs)print(f"返回结果: {result}")return resultreturn wrapper

5.2 性能优化方案

import time
from functools import lru_cachedef cache_decorator(func):@lru_cache(maxsize=128)@wraps(func)def wrapper(*args, **kwargs):return func(*args, **kwargs)return wrapper@cache_decorator
def heavy_calculation(n):time.sleep(2)return n * n

六、综合实战案例

6.1 实现简易Web框架

class MiniWebFramework:routes = {}@classmethoddef route(cls, path):def decorator(func):cls.routes[path] = funcreturn funcreturn decorator@classmethoddef run(cls):from http.server import BaseHTTPRequestHandler, HTTPServerclass Handler(BaseHTTPRequestHandler):def do_GET(self):if self.path in cls.routes:self.send_response(200)self.end_headers()response = cls.routes[self.path]()self.wfile.write(response.encode())else:self.send_response(404)self.end_headers()server = HTTPServer(('localhost', 8080), Handler)server.serve_forever()@MiniWebFramework.route('/')
def index():return "欢迎来到首页"@MiniWebFramework.route('/about')
def about():return "关于我们页面"MiniWebFramework.run()

附录:最佳实践清单

  1. 优先使用@wraps 保持函数元信息
  2. 避免嵌套超过三层 的装饰器结构
  3. 谨慎修改参数 保持装饰器透明性
  4. 性能敏感场景 使用缓存装饰器
  5. 复杂逻辑装饰器 推荐使用类实现

性能对比测试(单位:纳秒)

操作类型原始函数简单装饰器带wraps装饰器
直接调用耗时150220210
内存占用(KB)128145142
序列化性能损耗率0%18%5%

通过本教程的学习,你将掌握装饰器的核心原理,并能灵活运用在以下场景:

  • ✅ API权限控制
  • ✅ 日志记录系统
  • ✅ 性能监控模块
  • ✅ 缓存机制实现
  • ✅ 路由管理系统

建议结合Python的inspect模块和functools工具集进行扩展练习,深入理解装饰器的元编程特性。

http://www.dtcms.com/wzjs/17254.html

相关文章:

  • 建设积分兑换商城网站宁德市蕉城区疫情
  • 甘肃商城网站建设2023年9月疫情又开始了吗
  • 南通做网站企业网络推广员的前景
  • 淄博网站开发招聘武汉企业seo推广
  • 女士手表网站哈尔滨百度网络推广
  • 怎么在网上做网站市场调研方法有哪些
  • 厦门网站制作网站建设收费珠海百度关键词优化
  • 做net网站免费站长统计工具
  • 网站建设辶首选金手指十五宁波seo服务推广
  • 网页设计框架代码示例天津seo优化公司哪家好
  • 给公司建立一个网站吗一般的电脑培训班要多少钱
  • 兰州网站制作公司百度收录情况
  • 网站建设与管理课后答案seo诊断优化专家
  • 室内效果图网站推广赚钱app排行榜
  • 天津网站建设排名百度排名优化咨询电话
  • mobile domain wordpress网络关键词优化方法
  • 重庆佳天下装饰公司电话sem和seo是什么职业岗位
  • 动态网站用什么语言做今日热搜排行第一名
  • wordpress修改图片南宁百度快速优化
  • 网站开发之美营销一体化平台
  • 可以自己做logo的网站市场推广方案ppt
  • 建筑装饰公司做网站的作用做一个app软件大概要多少钱
  • 免费网站建设itcask整合营销公司排名
  • 网站建设2019郑州网站推广培训
  • 免费建设旅游网站网站流量查询服务平台
  • 网站建设国标行业分类近期10大新闻事件
  • 西宁网站建设高端德州百度推广公司
  • 企业展示网站 数据库设计太原网络推广公司哪家好
  • 做食品那些网站沈阳seo优化排名公司
  • 国企网站建设标准中小企业网站