一、装饰器是什么
-
把一个函数当作参数传递给另一个函数 返回一个替代版的函数
-
本质上就是一个返回函数的函数
-
在不改变原函数的基础上 给函数增加功能
-
函数可以作为参数被传递
1.用装饰器判断输入的年龄是否小于0
2.用装饰器实现计时器
import time
import random
import string
import functools
li = [random.choice(string.ascii_letters) for i in range(100)]
def timeit(func):
@functools.wraps(func)
def wrapper(*args, **kwargs): # 接收可变参数 和关键字参数
"""这是一个装饰器timeit"""
# 在函数运行只前
start_time = time.time()
# 执行函数
res = func(*args, **kwargs)
# 在函数运行之后
end_time = time.time()
print('运行时间为:%.6f' % (end_time - start_time))
return res
return wrapper
@timeit
def con_add():
s = ''
for i in li:
s += (i + ',')
print(s)
@timeit
def join_add():
print(','.join(li))
con_add()
join_add()
# @timeit
def fun_list(n):
"""这是fun_list函数"""
return [2 * i for i in range(n)]
@timeit
def fun_map(n):
"""这是fun_map函数"""
return list(map(lambda x:x*2,range(n)))
fun_list(100000)
fun_map(100000)
print(fun_map.__doc__)
print(fun_list.__doc__)
print(fun_map.__name__)
print(fun_list.__name__)
3.多个装饰器
- 情况一
在生活中的实例,为某个管理信息系统设置不同的用户权限。
- 情况二