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

青海微网站建设怎样做网站兼职

青海微网站建设,怎样做网站兼职,wordpress分类标签插件,营销型网站建设品牌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/a/555605.html

相关文章:

  • 网站建设 岗位职责如何购买域名和备案
  • 物流商 网站建设方案免费私人直播间 哔哩哔哩
  • 建筑设计招标网站做一个自己的网站多少钱
  • 用iis浏览网站茶山网站仿做
  • 怎样做淘宝推广网站城阳区规划建设局网站
  • 哈尔滨建站费用建站特别慢wordpress
  • ai智能写作网站网站开发设计怎么找客户
  • 高端 旅游 网站建设重庆市建设工程信息
  • 视频网站做板块栏目吉林省白山市建设厅网站首页
  • 商业网站缩写做海报的软件app免费
  • 济宁做网站的公司外贸 wordpress模板
  • 开放平台 的优势 传统门户网站爱战网关键词工具
  • 网站内容的排版布局网站建设技术服务
  • 网站栏目建设图怎么做套系网站
  • 鄂尔多斯网站制作公司开发一个app的步骤
  • 网站建设基本流程流程图it公司做网站用什么软件
  • 怎么建设境外网站泸州网站建设报价
  • 网站后台上传文字图片泰安齐鲁人才网最新招聘网
  • 美食网站制作模板长春专用网站建设
  • 搜狗站长工具平台做网站的优势有哪些
  • 在线网站制作工具松岗网站建设
  • 做视频网站可行吗品牌网站建设荐选蝌蚪
  • ​极限挑战之一命速通并查集
  • 做网站三河南宁优化推广服务
  • asp网站后台产品管理中增加一个功能怎样修改做网站怎么开后台
  • 如何使用 Promise.all() 处理异步并发操作?
  • 网站维护要什么奇迹网站建设多少钱
  • 网站备案需要ftp吗公司网站 建设
  • 网站对公司有什么好处公司建设网站的案例分析
  • 深圳建设局网站注册结构师培训附件怎样推广一个产品