MST

星途 面试题库

面试题:Python函数装饰器的本质及应用

详细阐述Python函数装饰器的本质,它是如何工作的?请编写一个装饰器,用于记录被装饰函数的调用时间,并在每次调用时打印出当前时间和函数名。
33.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

Python函数装饰器本质及工作原理

  1. 本质
    • Python函数装饰器本质上是一个高阶函数,它接受一个函数作为参数,并返回一个新的函数。它提供了一种简洁的方式来增强或修改已有函数的行为,而无需直接修改函数的源代码。
  2. 工作原理
    • 当一个函数被装饰器装饰时,实际上是将被装饰的函数作为参数传递给装饰器函数。装饰器函数内部定义一个新的函数(通常称为包装函数),这个包装函数可以在调用原函数前后执行一些额外的代码,然后返回包装函数,原函数名就指向了这个新返回的包装函数。这样,当调用原函数名时,实际执行的是包装函数的代码,从而实现对原函数功能的扩展。

记录函数调用时间的装饰器代码

import time


def log_call_time(func):
    def wrapper(*args, **kwargs):
        current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
        print(f"当前时间: {current_time}, 函数名: {func.__name__}")
        result = func(*args, **kwargs)
        return result

    return wrapper


@log_call_time
def test_function():
    print("这是被装饰的函数")


test_function()