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

有意思网站推荐网站开发当前城市定位功能

有意思网站推荐,网站开发当前城市定位功能,开发一栋楼需要多少钱,白山市网站建设Python装饰器详解 1. 装饰器是什么? 装饰器(Decorator)是Python中用于动态修改函数或类行为的工具。它本质上是一个高阶函数,接受一个函数作为参数,返回一个新的增强函数。通过decorator语法糖,可以在不修…

Python装饰器详解

1. 装饰器是什么?

装饰器(Decorator)是Python中用于动态修改函数或类行为的工具。它本质上是一个高阶函数,接受一个函数作为参数,返回一个新的增强函数。通过@decorator语法糖,可以在不修改原函数代码的情况下扩展其功能。

2. 核心语法与原理
  • 基本语法

    @decorator_name
    def target_function():pass
    

    等价于:

    target_function = decorator_name(target_function)
    
  • 保留元数据
    使用functools.wraps保留原函数的名称、文档字符串等信息:

    import functoolsdef my_decorator(func):@functools.wraps(func)def wrapper(*args, **kwargs):# 增强逻辑return func(*args, **kwargs)return wrapper
    
3. 常见使用场景

装饰器广泛应用于以下场景:

场景作用示例代码
日志记录记录函数输入输出及执行细节python def log_decorator(func): ... logging.info(f"Call {func.__name__}")
性能分析测量函数执行时间python def timer(func): ... print(f"Time: {time.time()-start}")
权限验证检查用户权限python def auth_required(func): ... if not user.is_admin: raise Error
缓存结果存储函数结果避免重复计算python def memoize(func): ... cache[args] = func(*args)
输入验证确保参数合法性python def validate_input(func): ... if not isinstance(x, int): raise
重试机制自动重试失败操作python def retry(func): ... for _ in range(3): try: return func()
4. 高级用法
  • 带参数的装饰器
    通过嵌套函数实现参数传递:

    def repeat(n):def decorator(func):def wrapper(*args, **kwargs):for _ in range(n):result = func(*args, **kwargs)return resultreturn wrapperreturn decorator@repeat(3)
    def greet(name):print(f"Hello {name}")
    
  • 类装饰器
    定义__call__方法修改类行为:

    class LogDecorator:def __init__(self, func):self.func = funcdef __call__(self, *args, **kwargs):print(f"Call {self.func.__name__}")return self.func(*args, **kwargs)@LogDecorator
    def my_function():pass
    
  • 装饰器链
    组合多个装饰器,按从内到外顺序执行:

    @decorator1
    @decorator2
    def my_func():pass
    
5. 实际应用示例

场景:优化斐波那契数列计算

import functools
import time# 日志装饰器
def log_decorator(func):@functools.wraps(func)def wrapper(*args, **kwargs):print(f"Call {func.__name__} with args {args}")result = func(*args, **kwargs)print(f"{func.__name__} returned {result}")return resultreturn wrapper# 计时装饰器
def timer(func):@functools.wraps(func)def wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)print(f"{func.__name__} took {time.time()-start:.4f}s")return resultreturn wrapper# 缓存装饰器
def memoize(func):cache = {}@functools.wraps(func)def wrapper(*args):if args not in cache:cache[args] = func(*args)return cache[args]return wrapper# 应用装饰器
@log_decorator
@timer
@memoize
def fibonacci(n):if n <= 1:return nreturn fibonacci(n-1) + fibonacci(n-2)print(fibonacci(30))  # 输出结果并显示执行时间
6. 总结

装饰器是Python中提升代码复用性和可维护性的重要工具。通过动态增强函数行为,它适用于日志记录、性能监控、权限控制等多种场景。合理使用装饰器能使代码更简洁优雅,同时避免重复代码。

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

相关文章:

  • 网站WordPress站点商业网站开发实训心得体会范文
  • 外贸电子网站app网站开发的特点
  • 有园林案例的网站建设银行为啥重置不了密码
  • 学生简单网站制作教程免费创建网站的平台
  • 国外网站设计风格手机app设计方案
  • 刚察县公司网站建设平面设计制作公司
  • 发布 php 微网站如何关闭2345网址导航
  • 沭阳城乡建设局网站昆山网站建设需要多少钱
  • 常州新北区建设局网站wordpress数据库名和主机怎么填
  • 网站开发json解析企业网站建设免费
  • 网络建站 响应式网站渭南市网站建设
  • 网站建设合同书相关附件天猫商城网上购物
  • 建筑劳务东莞网站建设上海网络平台有哪些
  • asp网站和php网站东莞市电池网站建设
  • 公司做网站的招标书郑州经济技术开发区属于什么区
  • 江津网站建设口碑中企动力做网站
  • wordpress网站前台密码无锡网站seo顾问
  • 赣州企业网站建设推广网站建设包含专业
  • 建站平台排行淄博网站制作设计
  • 自助建网站平台深圳网络建设公司
  • 镇江建设网站的公司上海做网站建设公司排名
  • 值得相信的西安网站开发wordpress页面功能
  • 陕西省建设监理协会网站女性时尚网站模板
  • 从事网站美工建设百度知道灰色词代发收录
  • 辽ICP备 网站建设 中企动力泰安外贸网站建设公司
  • 光谷网站建设公司中国招标投标网查询平台
  • 网站设计跟网站开发区别小学生网站制作
  • 网站备案安全责任书是谁盖章文化网站建设心得
  • 分析网站优缺点中国建设教育协会网站查
  • 企业网站开发市场如何把自己做的网站挂网上