点击
什么是装饰器
装饰器利用了函数就可以作为参数传递和闭包的特性, 可以让函数执行之前或者执行之后添加一些代码
装饰器的例子
- 自定义装饰器: 判断用户是否登录了
is_login = True
def user(func):
"""装饰器"""
def inner():
if is_login:
func()
else:
print('跳转登录页面')
return inner
@user
# @user = user(edit_name)()
def edit_name():
print('修改用户名成功')
# # edit_name() = user(edit_name)()
edit_name()
# user(edit_name)()
被装饰函数带有参数
- 如果带有参数的函数被装饰, 那么需要修改装饰器
- 装饰器中闭包中给两个接受万能的参数 *args, **kwargs
带参数的装饰器
- 如果装饰器带有参数, 那么需要在外面写一层函数, 里面写两层闭包函数
wraps装饰器(重点使用的装饰器)
-
每次写装饰器时, 都应该加上wraps装饰器, 养成良好的写代码习惯
-
wraps装饰器可以去伪存真, 一旦我们使用了装饰器, 那么__name__的本质就发生了变化
-
在每个装饰器中调用函数的地方, 加上一层@wraps装饰器, 就不会影响__name___
-
wraps的导入
from functools import wraps