Python装饰器的使用方法及应用举例
发布时间:2023-06-24 15:52:29
Python装饰器是Python语言中一种非常实用的语法结构,可以将函数作为参数传入另一个函数,然后在不改变原函数定义的情况下,为原函数添加额外的功能。
Python装饰器的使用方法
Python装饰器的使用方法非常简单,只需要定义一个函数,这个函数需要接收一个函数作为参数,并返回一个新的函数即可。下面是一个简单的Python装饰器示例:
def my_decorator(func):
def wrapper():
print("Before the function is executed.")
func()
print("After the function is executed.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
这个示例中,定义了一个装饰器函数my_decorator,它接收一个函数参数func,定义了一个内部函数wrapper,在wrapper中执行了一些额外的操作,并在最后调用了原函数func。然后将wrapper函数返回。在原函数上方使用@my_decorator,就相当于对原函数进行了装饰。
通过运行上面的代码,我们可以得到以下输出:
Before the function is executed. Hello! After the function is executed.
Python装饰器的应用举例
下面是一些Python装饰器的常见应用举例:
1. 计时装饰器
计时装饰器可以帮助我们计算每个函数的执行时间。下面是一个计时装饰器的示例:
import time
def time_it(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print("Function %s took %f seconds" % (func.__name__, end_time - start_time))
return result
return wrapper
@time_it
def my_function():
time.sleep(1)
my_function()
2. 缓存装饰器
缓存装饰器可以帮助我们缓存一些函数的计算结果,避免重复计算。下面是一个缓存装饰器的示例:
def cache_it(func):
cache = {}
def wrapper(*args, **kwargs):
key = str(args) + str(kwargs)
if key not in cache:
cache[key] = func(*args, **kwargs)
return cache[key]
return wrapper
@cache_it
def calculate(a, b):
print("Calculating...")
return a + b
print(calculate(1, 2))
print(calculate(1, 2))
3. 认证装饰器
认证装饰器可以帮助我们对一些需要认证才能访问的函数进行授权。下面是一个认证装饰器的示例:
def authenticate(func):
def wrapper(*args, **kwargs):
username = input("Username: ")
password = input("Password: ")
if check_credentials(username, password):
return func(*args, **kwargs)
else:
return "Access denied"
return wrapper
@authenticate
def my_function():
return "Sensitive data"
def check_credentials(username, password):
if username == "admin" and password == "123456":
return True
else:
return False
print(my_function())
通过这些示例,我们可以看到Python装饰器的强大功能。我们可以根据实际场景,自己编写装饰器,为函数添加自定义的功能。
