深入理解Python中的装饰器

Python作为一门高级编程语言,在众多领域都有着广泛的应用。在Python语言中,装饰器是一个非常重要的概念,它可以让我们在不改变函数定义的情况下,对函数的功能进行扩展或者修改。

在Python中,装饰器本质上是一个函数,它可以接收一个函数作为参数,并返回一个新的函数。在装饰器的内部,我们可以对被装饰的函数进行一些处理,比如打印日志、计时、权限校验等等。下面是一个简单的装饰器示例:

python Copy code

def my_decorator(func):

def wrapper():

print(“Before the function is called.”)

func()

print(“After the function is called.”)

return wrapper

@my_decorator

def say_hello():

print(“Hello!”)

say_hello()

在上面的代码中,我们定义了一个名为my_decorator的装饰器,它接收一个函数作为参数,并返回一个新的函数wrapper。在wrapper函数内部,我们先打印了一条“Before the function is called.”的日志,然后调用了传入的函数func,最后又打印了一条“After the function is called.”的日志。我们使用装饰器修饰了一个名为say_hello的函数,并调用了它。运行结果如下:

vbnet Copy code

Before the function is called.

Hello!

After the function is called.

可以看到,在调用say_hello函数时,它的输出被装饰器进行了包装,并在调用前后打印了日志。

除了上述示例,装饰器还可以实现其他一些功能,比如缓存、参数检查等等。下面是一个缓存功能的装饰器示例:

python Copy code

def memoize(func):

cache = {}

def wrapper(*args):

if args in cache:

return cache[args]

else:

result = func(*args)

cache[args] = result

return result

return wrapper

@memoize

def fibonacci(n):

if n < 2:

return n

else:

return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(5))

print(fibonacci(10))