MST

星途 面试题库

面试题:Python装饰器在日志记录场景中的具体实现

请用Python实现一个装饰器,用于记录被装饰函数的调用时间、传入参数以及返回值,要求在每次函数调用时将相关信息打印到日志文件中。
23.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import time


def log_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        with open('function_log.txt', 'a') as f:
            f.write(f"调用时间: {time.ctime(start_time)}\n")
            f.write(f"传入位置参数: {args}\n")
            f.write(f"传入关键字参数: {kwargs}\n")
            f.write(f"返回值: {result}\n")
            f.write(f"函数执行时间: {end_time - start_time} 秒\n\n")
        return result

    return wrapper


@log_decorator
def example_function(a, b):
    time.sleep(1)
    return a + b


if __name__ == "__main__":
    example_function(3, 5)

上述代码中:

  1. log_decorator 是定义的装饰器函数,它接受一个函数 func 作为参数。
  2. wrapper 内部,使用 time.time() 获取函数调用开始和结束的时间,执行被装饰的函数并获取返回值。
  3. 打开 function_log.txt 文件(如果不存在则创建,'a' 模式表示追加写入),将调用时间、传入参数和返回值等信息写入文件。
  4. example_function 是被装饰的示例函数,模拟了一个简单的计算并使用 time.sleep 模拟函数执行时间。
  5. if __name__ == "__main__": 块中调用 example_function 来测试装饰器功能。