当前位置: 首页 > 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://www.dtcms.com/wzjs/126442.html

相关文章:

  • xwiki做的网站百度手机提高关键词排名
  • pc端购物网站建站网络优化的流程
  • 网站开发前后端分离是主流吗百度竞价推广是什么工作
  • 网站 建设的必要性淄博百度推广
  • 为什么打不开中国建设银行网站软文推广的优点
  • 有没有做黑市网站搜索引擎优化的英文缩写是什么
  • 英文购物网站建设推广网络营销外包公司
  • 做商城网站可以个人备案百度在全国有哪些代理商
  • seo教程培训班seo网上课程
  • xml是用来做网站的嘛无锡百姓网推广
  • 旧房装修找哪家seo软件资源
  • 网站建设好处安徽seo
  • wordpress怎么更改样式seo外包公司多少钱
  • 网站结构的类型成都推广系统
  • 中国菲律宾混血seo职位描述
  • 网站开发怎么做到前后端网络网站推广选择乐云seo
  • 济南抖音推广公司seo优化与sem推广有什么关系
  • 深圳专业营销网站制作百度投诉中心
  • 如何在手机做网站各大网站提交入口
  • 网站优化如何做如何做好网络推广销售
  • 网站地址解析创建网站步骤
  • 光明新区网站建设网络营销的三大基础
  • 开发网站服务器黑帽seo技术
  • 用jsp做婚纱网站的流程企业网站模板 免费
  • 南京自助网站推广建站企业宣传片视频
  • 专做沙发批发的网站软文推广服务
  • wordpress下载类主题系统主题游戏优化大师官方下载
  • 互联网站平台有哪些百度人工申诉客服电话
  • wordpress 游客隐藏网站做优化好还是推广好
  • 网站赌博做员工犯法吗石家庄全网seo