#创建一个装饰器,用于计算函数执行时间import time
deftime_this(func):defwrapper(*args,**kwargs):
start_time = time.time()
result = func(*args,**kwargs)
end_time = time.time()
execution_time = end_time - start_time
print(f"Execution time of {func.__name__}: {execution_time:.6f} seconds")return result
return wrapper
# 被装饰的函数@time_thisdefexpensive_function(n):
result =0for i inrange(n):
result += i * i
time.sleep(0.001)# 模拟执行时间# print(f"Processing {i+1}/{n}...")if i %1000==0:print("Progress: {:.2%}".format(i / n))
time.sleep(0.01)# 模拟进度print("Progress updated...")if i %5000==0:print("Saving intermediate result...")
time.sleep(0.1)# 模拟中断print("Saving completed...")if i %10000==0:print("Releasing resources...")
time.sleep(0.2)# 模拟释放资源print("Resources released...")return result
# 调用被装装饰的函数
expensive_function(10000)
例二 类型检查器
# 创建一个装饰器,用于检查函数的参数是否符合预期类型defcheck_types(*expected_types):defdecorator(func):defwrapper(*args,**kwargs):for i, arg inenumerate(args):ifnotisinstance(arg, expected_types[i]):raise TypeError(f"Expected {expected_types[i]} for argument {i+1}, got {type(arg).__name__}")for key, value in kwargs.items():ifnotisinstance(value, expected_types[i+len(args)]):raise TypeError(f"Expected {expected_types[i+len(args)]} for argument {key}, got {type(value).__name__}")return func(*args,**kwargs)return wrapper
return decorator
# 示例使用@check_types(int,str,list)defmy_function(num, name, items):print(f"Number: {num}, Name: {name}, Items: {items}")
my_function(10,"John",["apple","banana"])# 符合预期类型
my_function(10,"John",123)# 类型不匹配,会抛出 TypeError