欢迎访问宙启技术站
智能推送

Python中“装饰器”的工作原理及实际应用

发布时间:2023-05-26 04:10:49

Python中的“装饰器”是一种特殊的函数,可以在不修改函数源代码的情况下,添加额外的功能。它可以为函数添加日志、计时、缓存、权限控制等常见的功能,同时也可以增强函数的功能,让函数能够在特定情况下自动执行某些代码。

装饰器的工作原理是:当一个函数被装饰时,就会将这个函数作为参数传递给装饰器函数,装饰器函数会返回一个新的函数,这个新的函数具有额外的功能,之后调用原函数时就会执行这个新的函数。

下面给出一个实际的例子,说明装饰器的应用。假设有一个简单的函数,功能是输出“Hello, World!”:

def hello():
    print("Hello, World!")

现在需要在每次调用hello()函数时记录一下当前的时间。可以使用装饰器实现:

import datetime

def log_time(func):
    def wrapper():
        print("Current time:", datetime.datetime.now())
        func()
    return wrapper

@log_time
def hello():
    print("Hello, World!")

上述代码中,log_time()函数是一个装饰器函数,它接收一个函数作为参数,并返回一个新的函数wrapper()wrapper()函数里面调用了被装饰的函数func(),并且在调用前输出了当前时间。

为了将hello()函数装饰起来,可以在函数定义前使用@log_time语法糖,这样就会自动将hello()函数传递给log_time()函数。这时再调用hello()函数,就会自动执行log_time()中的代码,输出当前时间并执行原函数。

>>> hello()
Current time: 2021-09-27 09:03:56.967594
Hello, World!

除了记录时间以外,装饰器还可以实现很多有用的功能,比如:缓存计算结果、限制函数执行的次数、控制访问权限等。装饰器的应用可以大大提高程序的可读性、可维护性和可扩展性,因此在实际开发中被广泛应用。