python常用装饰器

在Python中,装饰器是一种用于修改或增强函数、方法或类的行为的特殊类型的函数,它们允许你在不改变原始代码的情况下,为函数或类添加额外的功能,本回答将介绍几个常用的Python装饰器,并给出详细的技术教学。

创新互联公司成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、重庆App定制开发、手机网站开发、微信网站制作、软件开发、服务器托管德阳等实行标准化操作,让客户可以直观的预知到从创新互联公司可以获得的服务效果。

1、内置装饰器 @property

@property 是一个内置的装饰器,用于将一个方法转换为属性,使其可以像访问属性一样访问方法,这对于实现getter和setter方法非常有用。

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    @property
    def name(self):
        return self._name
    @property
    def age(self):
        return self._age
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("年龄不能为负数")
        self._age = value
p = Person("张三", 25)
print(p.name)  # 输出:张三
print(p.age)   # 输出:25
p.age = 30     # 设置年龄为30
print(p.age)   # 输出:30

2、内置装饰器 @staticmethod@classmethod

@staticmethod@classmethod 是两个内置的装饰器,用于定义静态方法和类方法,静态方法不需要实例化对象就可以调用,而类方法需要通过类名调用。

class Math:
    @staticmethod
    def add(a, b):
        return a + b
    @classmethod
    def multiply(cls, a, b):
        return a * b
print(Math.add(1, 2))  # 输出:3
print(Math.multiply(2, 3))  # 输出:6

3、装饰器 functools.wraps

functools.wraps 是一个用于更新包装函数的元信息的装饰器,它可以确保原始函数的名称、文档字符串等信息在被装饰后保持不变。

import functools
def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("在函数执行前做一些操作")
        result = func(*args, **kwargs)
        print("在函数执行后做一些操作")
        return result
    return wrapper
@my_decorator
def add(a, b):
    """这是一个加法函数"""
    return a + b
print(add.__name__)  # 输出:add
print(add.__doc__)   # 输出:这是一个加法函数

4、装饰器 functools.lru_cache

functools.lru_cache 是一个用于缓存函数结果的装饰器,它可以提高函数的执行效率,特别是在处理重复计算时非常有用。

import functools
@functools.lru_cache(maxsize=None)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n1) + fibonacci(n2)
print(fibonacci(100))  # 输出:354224848179261915075

以上就是一些常用的Python装饰器的介绍和技术教学,使用装饰器可以让你的代码更加简洁、高效和易于维护,希望对你有所帮助!

网页题目:python常用装饰器
链接分享:http://www.mswzjz.cn/qtweb/news21/279171.html

温江区贝锐智能技术服务部_成都网站建设公司,为您提供做网站域名注册标签优化手机网站建设虚拟主机网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能