Python 闭包详解
闭包是一个函数和它所引用的环境组合的一个整体。在Python中,闭包通常是因为内部函数引用了外部函数的变量,从而导致外部函数的局部变量在内部函数中仍然可以访问。
闭包的一个常见用途是创建装饰器(decorator),以下是一个简单的装饰器的例子:
def make_decorator(func):
def decorator(*args, **kwargs):
print("Before the function call")
result = func(*args, **kwargs)
print("After the function call")
return result
return decorator
# 使用装饰器
@make_decorator
def my_function(x):
print(f"Function called with argument: {x}")
return x * 2
my_function(2)
在这个例子中,make_decorator
函数返回了一个闭包,即decorator
函数。这个闭包包含了对func
的引用,因此即使make_decorator
已经返回,my_function
的参数也能被装饰器所使用。
闭包还可以用于创建缓存等机制。例如,你可以创建一个缓存函数的调用结果的装饰器。
from functools import wraps
def cache(func):
cache_data = {}
@wraps(func)
def wrapper(*args):
if args in cache_data:
return cache_data[args]
else:
result = func(*args)
cache_data[args] = result
return result
return wrapper
@cache
def expensive_computation(x, y):
print("Expensive computation...")
return x + y
# 第一次调用,计算结果并缓存
print(expensive_computation(1, 2))
# 第二次调用,从缓存中获取结果
print(expensive_computation(1, 2))
在这个例子中,cache
装饰器创建了一个闭包,它通过一个字典cache_data
来缓存函数的结果。当再次使用相同参数调用expensive_computation
时,结果会直接从缓存中获取,而不是重新计算。
评论已关闭