MST

星途 面试题库

面试题:Python装饰器嵌套与参数传递

假设有一个函数`original_function`,它接受两个整数参数并返回它们的和。编写两个装饰器`logging_decorator`和`timer_decorator`,并嵌套使用。`logging_decorator`需要记录函数的输入参数和返回值,`timer_decorator`需要计算函数执行的时间并打印出来。展示如何正确地实现这种嵌套装饰器并确保它们能正确处理函数的参数和返回值。
13.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import time


def logging_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"输入参数: {args}, {kwargs}")
        result = func(*args, **kwargs)
        print(f"返回值: {result}")
        return result

    return wrapper


def timer_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"函数执行时间: {end_time - start_time} 秒")
        return result

    return wrapper


@timer_decorator
@logging_decorator
def original_function(a, b):
    return a + b


你可以这样调用:

result = original_function(3, 5)

上述代码中,logging_decorator 装饰器用于记录函数的输入参数和返回值,timer_decorator 装饰器用于计算函数执行的时间并打印。通过嵌套使用这两个装饰器,original_function 函数在执行时,会先被 logging_decorator 装饰,再被 timer_decorator 装饰。这样在函数执行前后,就能分别实现记录输入输出和计算执行时间的功能。