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

Python函数中的装饰器:简化代码、提高可读性

发布时间:2023-06-14 05:28:57

Python函数中的装饰器可以帮助我们简化代码,提高可读性。装饰器是一个特殊的函数,它可以接收一个函数作为参数,并且返回一个新的函数。通过装饰器,我们可以在不修改原有函数的基础上,增加某些特定的功能或者改变函数的行为。下面我们来看看具体的例子。

1、装饰器实现函数计时器

''' 

    装饰器实现函数的计时器 

''' 

import time 

def timer(func): 

    def wrapper(*args, **kwargs): 

        start = time.time() 

        result = func(*args, **kwargs) 

        end = time.time() 

        print("函数 %s 耗时 %f s" % (func.__name__, end - start)) 

        return result 

    return wrapper 

@timer 

def func(): 

    time.sleep(2) 

func()  

# 函数 func 耗时 2.001145 s 

上面的例子中,我们定义了一个装饰器 timer,它接收一个函数作为参数,返回一个新的函数 wrapper。在 wrapper 函数中,我们首先记录了函数执行前的时间,然后执行原函数,并记录了函数执行后的时间,最后计算出函数执行的时间并输出。通过使用 @timer 装饰器,我们将函数 func 加上了计时器功能,实现了函数计时器的功能。

2、装饰器实现函数日志

''' 

    装饰器实现函数的日志 

''' 

def logging(func): 

    def wrapper(*args, **kwargs): 

        print("%s is called" % func.__name__) 

        return func(*args, **kwargs) 

    return wrapper 

@logging 

def func(): 

    print("I am func") 

func()

# func is called 

# I am func 

上面的例子中,我们定义了一个装饰器 logging,它接收一个函数作为参数,返回一个新的函数 wrapper。在 wrapper 函数中,我们在调用原函数之前输出了日志信息。通过使用 @logging 装饰器,我们将函数 func 加上了日志信息,实现了函数日志的功能。

通过装饰器,我们可以实现很多有用的功能,如缓存、权限控制、性能分析等。在编写代码时,我们可以将一些通用的功能抽离出来作为装饰器,然后在需要使用这些功能的函数上加上相应的装饰器,从而可以在不修改原函数的情况下实现特定的功能。这样既可以提高代码的可读性,又可以减少代码的重复性。