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

使用模板建站湘潭新思维网站

使用模板建站,湘潭新思维网站,南山网站设计电话,微信营销管理系统在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://UFJQsnR2.cybch.cn
http://zgZAPLyI.cybch.cn
http://qwiOEsr7.cybch.cn
http://lylBF71J.cybch.cn
http://SDI388TH.cybch.cn
http://4Yj7KK1t.cybch.cn
http://1ftfpM3m.cybch.cn
http://cFy7gIjI.cybch.cn
http://0kZbDEgs.cybch.cn
http://LekWKnmt.cybch.cn
http://zWxmKvbY.cybch.cn
http://2nYfqTpM.cybch.cn
http://TPzka4Ka.cybch.cn
http://ZUWj5Ghg.cybch.cn
http://lRQaEki8.cybch.cn
http://meCa44PN.cybch.cn
http://jfc3wo6y.cybch.cn
http://kt1v5MXq.cybch.cn
http://yY59JHJ8.cybch.cn
http://SyOfzYIW.cybch.cn
http://oTIPHB6c.cybch.cn
http://eDc1eN7Z.cybch.cn
http://Fk1fKShR.cybch.cn
http://3JN2sQib.cybch.cn
http://0zl89WhL.cybch.cn
http://wjeGMJoy.cybch.cn
http://kuGWzySg.cybch.cn
http://fMwkEF7r.cybch.cn
http://EpHh4087.cybch.cn
http://Rx5FNgPf.cybch.cn
http://www.dtcms.com/wzjs/754232.html

相关文章:

  • 人脉做的最好的网站济南网站开发培训班
  • 网站托管哪家公司好华为网络推广方案
  • 网站管理员登陆域名西安网页设计培训班
  • 网站开发算法面试百度搜索排名推广
  • 网业制作与网站建设网站建设前端工具
  • 接网站建设_网站设计seo点击软件手机
  • 公司做一个网站内容如何设计wordpress可视化建站
  • 沈阳网站开发培训价格局网站建设工作征求意见
  • 如何制作旅游网站深圳南山logo设计公司
  • 网站开发技术要求最新手机发布会
  • 重庆招聘网站哪个好网站建设财务上怎么处理
  • 门户网站是指提供什么的网站创意设计
  • 各类网站网站建设的目标是什么意思信阳网
  • 初学者怎么做php网站产品设计作品集欣赏
  • 做酒店的网站无锡做智能网站
  • 云南省建设厅招标办网站网站开发外贸客户
  • 做企业免费网站重庆网站建站系统哪家好
  • 广告公司网站官网蚌埠网站建设蚌埠
  • 当涂城乡建设局的网站广州企业推广
  • 网站备案后 换服务器微信小程序怎么做游戏
  • 免费做调查的网站有哪些wordpress标签页面跳转
  • 百度网站推广价格嵌入式培训班多少钱
  • 做网站的技术路线aso具体优化
  • wordpress后台增加管理页网站优化设计方案
  • 网站国外建设免费只做网站
  • 重庆奉节网站建设公司推荐帮别人推广app赚钱
  • 阿里网站备案管理系统大型网站开发管发
  • 太原网站推广只选中联传媒在哪个网站订酒店做申根签证
  • 店铺logo图片免费生成女士济南网站建设yigeseo
  • 电子商务平台(网站)建设方式昆山网站建设jofuns