代码编织梦想

Python装饰器的神秘功能

Python装饰器作为一种高级编程技巧,经常用于在不改变已有代码结构的情况下,为函数或方法添加额外功能。除了最基础的函数装饰器、类装饰器和属性装饰器之外,装饰器还有许多隐秘的应用功能,本文将向读者介绍其中几种。

一、装饰器可以接受参数
除了直接将装饰器放在函数定义前面,Python装饰器还支持在装饰器后面加上圆括号,来传递参数。

def param_decorator(param):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(f"param is {param}")
            return func(*args, **kwargs)
        return wrapper
    return decorator

@param_decorator(param="parameter")
def example_function():
    print("This is an example function.")

example_function()

二、装饰器可以在类中使用
装饰器不仅可以用来装饰函数,还可以用来装饰类,以添加额外功能。

def class_decorator(cls):
    class Wrapper:
        def __init__(self, *args, **kwargs):
            self.wrapped = cls(*args, **kwargs)

        def decorated_method(self):
            print("Decorated method.")

        def __getattr__(self, name):
            return getattr(self.wrapped, name)

    return Wrapper

@class_decorator
class ExampleClass:
    def original_method(self):
        print("Original method.")

example_object = ExampleClass()
example_object.original_method()
example_object.decorated_method()

三、装饰器可以缓存函数结果
一种常见的装饰器应用是为函数添加缓存功能,以避免对相同的输入参数重复计算。

import functools

def memoize(func):
    cache = {}
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        if (args, kwargs) not in cache:
            cache[(args, kwargs)] = func(*args, **kwargs)
        return cache[(args, kwargs)]
    return wrapper

@memoize
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(50))

本文介绍的这些Python装饰器的高级功能,是在日常工作中经常会用到的技巧。通过这些高级技巧,我们能够更加灵活地为已有代码添加新功能,提高我们编写的程序的可复用性和可维护性。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_47037246/article/details/131028064

ga算法|遗传算法|sysu期末课程设计|python+matlab实现|超完备代码实现-爱代码爱编程

前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482操作系统专栏https://blog.csdn.net/yu_cblog/category_12165502.html?spm