python装饰器

在Python中,装饰器可以简化代码、增加功能或者优化性能。下面是一些常见的装饰器及其用法:

1. @property

@property 是用来创建只读属性的装饰器。它把一个方法转换成属性的形式访问,可以让你对实例属性的获取进行更加详细的控制。

用法示例:

python 复制代码
class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @property
    def area(self):
        return 3.14159 * self._radius ** 2

c = Circle(4)
print(c.radius)  # 输出: 4
print(c.area)    # 输出: 50.26544

2. @staticmethod

@staticmethod 是用来表明一个方法是静态方法,它不需要表示一个类的实例或者类本身。

用法示例:

python 复制代码
class Math:
    @staticmethod
    def add(x, y):
        return x + y

print(Math.add(5, 7))  # 输出: 12

3. @classmethod

@classmethod 使得方法成为类方法,这意味着这个方法接收当前类作为第一个参数,而不是实例。

用法示例:

python 复制代码
class Person:
    species = 'Human'

    @classmethod
    def get_species(cls):
        return cls.species

print(Person.get_species())  # 输出: Human

4. @functools.lru_cache

来自functools模块,@lru_cache 是一个缓存装饰器,用于缓存最近使用的输入及其结果,从而加快连续调用的速度。

用法示例:

python 复制代码
from functools import lru_cache

@lru_cache(maxsize=32)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

print(fib(10))  # 输出: 55

5. @cached_property

@cached_property 是一个装饰器,用于将一个方法的返回值缓存为对象的属性。这意味着它只计算一次,然后将结果存储起来,用于后续的属性访问。

用法示例:

python 复制代码
from functools import cached_property

class Dataset:
    def __init__(self, data_source):
        self.data_source = data_source

    @cached_property
    def data(self):
        print("Loading data...")
        return load_data(self.data_source)  # 假设这是一个加载数据的函数

dataset = Dataset("data.csv")
print(dataset.data)  # 第一次访问,会加载数据
print(dataset.data)  # 后续访问,直接使用缓存的数据
相关推荐
java1234_小锋35 分钟前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 神经网络基础原理
python·深度学习·tensorflow·tensorflow2
JJJJ_iii36 分钟前
【深度学习03】神经网络基本骨架、卷积、池化、非线性激活、线性层、搭建网络
网络·人工智能·pytorch·笔记·python·深度学习·神经网络
JJJJ_iii1 小时前
【深度学习05】PyTorch:完整的模型训练套路
人工智能·pytorch·python·深度学习
程序员小远2 小时前
常用的测试用例
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
IT学长编程2 小时前
计算机毕业设计 基于EChants的海洋气象数据可视化平台设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·毕业设计·课程设计·毕业论文·海洋气象数据可视化平台
辣椒http_出海辣椒2 小时前
Python 数据抓取实战:从基础到反爬策略的完整指南
python
荼蘼2 小时前
使用 Flask 实现本机 PyTorch 模型部署:从服务端搭建到客户端调用
人工智能·pytorch·python
(时光煮雨)2 小时前
【Python进阶】Python爬虫-Selenium
爬虫·python·selenium
小政同学3 小时前
【Python】小练习-考察变量作用域问题
开发语言·python
Lynnxiaowen3 小时前
今天我们开始学习python3编程之python基础
linux·运维·python·学习