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

wordpress添加视频解析比较好的网络优化公司

wordpress添加视频解析,比较好的网络优化公司,医疗网站做药品是干嘛,深圳设计公司办公室装修设计在Python中,装饰器(Decorator) 使用 符号实现,是一种修改函数/类行为的语法糖。它本质上是一个高阶函数,接受目标函数作为参数并返回包装后的函数。Python也提供了多个内置装饰器,如 property、staticmeth…

在Python中,装饰器(Decorator) 使用 @ 符号实现,是一种修改函数/类行为的语法糖。它本质上是一个高阶函数,接受目标函数作为参数并返回包装后的函数。Python也提供了多个内置装饰器,如 @property@staticmethod@classmethod 等。


一、核心概念

  1. 装饰器本质@decorator 等价于 func = decorator(func)
  2. 执行时机:在函数/类定义时立即执行装饰器逻辑
  3. 链式装饰:多个装饰器按从下到上的顺序应用
    @decorator1
    @decorator2
    def func(): ...
    # 等价于:func = decorator1(decorator2(func))
    

二、自定义装饰器示例

1. 函数装饰器(无参数)
def logger(func):def wrapper(*args, **kwargs):print(f"调用函数: {func.__name__}")return func(*args, **kwargs)return wrapper@logger
def add(a, b):return a + bprint(add(3, 5))  
# 输出: 
#   调用函数: add
#   8
2. 带参数的装饰器
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}!")greet("Alice")
# 输出:
#   Hello, Alice!
#   Hello, Alice!
#   Hello, Alice!
3. 类装饰器
class CountCalls:def __init__(self, func):self.func = funcself.calls = 0def __call__(self, *args, **kwargs):self.calls += 1print(f"调用次数: {self.calls}")return self.func(*args, **kwargs)@CountCalls
def say_hello():print("Hello!")say_hello()  # 输出: 调用次数: 1 \n Hello!
say_hello()  # 输出: 调用次数: 2 \n Hello!

三、内置装饰器详解

1. @property:定义属性访问
class Circle:def __init__(self, radius):self._radius = radius@propertydef radius(self):"""Getter: 访问半径"""return self._radius@radius.setterdef radius(self, value):"""Setter: 设置半径(带验证)"""if value <= 0:raise ValueError("半径必须为正数")self._radius = value@propertydef area(self):"""只读属性: 计算面积"""return 3.14 * self._radius ** 2c = Circle(5)
print(c.radius)    # 5 (像属性一样调用)
c.radius = 10      # 调用setter
print(c.area)      # 314.0 (只读属性)
# c.area = 100     # 报错: AttributeError
2. @classmethod:类方法
class Date:def __init__(self, year, month, day):self.year = yearself.month = monthself.day = day@classmethoddef from_string(cls, date_str):"""工厂方法: 从字符串创建实例"""year, month, day = map(int, date_str.split('-'))return cls(year, month, day)  # cls指向类本身def __str__(self):return f"{self.year}-{self.month}-{self.day}"d = Date.from_string("2023-10-01")
print(d)  # 2023-10-01
3. @staticmethod:静态方法
class MathUtils:@staticmethoddef add(a, b):"""与类相关但不需要类/实例参与的独立函数"""return a + bprint(MathUtils.add(3, 7))  # 10 (无需实例化)
4. @functools.wraps:保留元数据
import functoolsdef debug(func):@functools.wraps(func)  # 保留原函数名/文档等元数据def wrapper(*args, **kwargs):print(f"调试: {func.__name__}()")return func(*args, **kwargs)return wrapper@debug
def example():"""示例函数文档"""passprint(example.__name__)  # "example" (不加wraps会显示"wrapper")
print(example.__doc__)   # "示例函数文档"

四、使用场景总结

装饰器类型典型应用场景
自定义无参装饰器日志记录、性能计时、权限验证
自定义带参装饰器重复执行、超时控制、注册路由(如Flask)
@property封装属性访问、添加验证逻辑、计算属性
@classmethod工厂方法创建实例、操作类级别数据
@staticmethod工具函数(与类相关但无需访问实例/类状态)
@functools.cache缓存函数结果(Python 3.9+)

五、注意事项

  1. 装饰器会改变函数的__name__等元数据(用@functools.wraps修复)
  2. 多个装饰器顺序影响行为(最靠近函数的装饰器最先执行)
  3. @property必须定义在相同名称的@xxx.setter之前

掌握装饰器能大幅提升代码的复用性和可读性,是Python高级编程的核心技术之一。

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

相关文章:

  • WordPress蜘蛛爬行插件seo网络推广机构
  • 网站内容排版设计白度
  • 网站建设方案策划书ppt模板百度移动排名优化软件
  • 空间中国网站地址多少seo网站优化优化排名
  • 电子商务网站建设与维护杭州seo博客有哪些
  • 佳木斯做网站的公司app拉新推广代理
  • 如何帮人做网站国内设计公司前十名
  • 泰安有哪些景点seo最好的工具
  • 优秀网站设计赏析重庆森林粤语完整版在线观看免费
  • 厦门律师网站建设免费开发网站
  • 营销者网站石家庄关键词优化报价
  • 公司网站建设南宁厦门网站建设公司哪家好
  • 佛山专业做网站公司免费制作网站的平台
  • 网站建设公司官方网站深圳经济最新新闻
  • 做淘宝要用到哪些网站信息推广平台有哪些
  • 巩义做网站汉狮公司推广网上国网
  • 如何建设一个门户网站中山谷歌推广
  • 企业网站宽度南京百度seo排名
  • 济南手机网站建设专业定制免费做网站网站的软件
  • 葫芦岛网站建设青岛网站排名推广
  • shopify做旅游网站百度官网首页登录
  • 58同城网站建设安卓aso优化
  • 句容做网站唐山建站公司模板
  • wordpress+4.2.4中文什么是白帽seo
  • div css网站布局案...谷歌seo一个月费用需要2万吗
  • 衡阳网站优化方案临沂百度联系方式
  • 海外代购网站临沂做网站的公司
  • 手机网站自助建设电商运营一天都干啥
  • 怎样添加网站图标网站设计公司报价
  • vs做网站加背景长沙seo关键词排名优化