'''函数装饰器:1.装饰器传递参数2.无参装饰器 此处的参数指的是装饰器有无参数而不是原函数有无参数3.有参装饰器 需要在装饰器前再套一层函数作为参数的传递
'''#装饰器传递参数 通用写法: *args,**kwargs
def log(func):def wrapper(*args, **kwargs): #无参print("log...before")func(*args, **kwargs)print("log...after")return wrapper@log #装饰器传递原函数参数
def add_user(username):print(f"添加用户: {username}")add_user("李四")print("--------------------------------------------------无参装饰器")#2. 无参装饰器 无参:装饰器函数没有参数
def no_args_log(func):def wrapper(*args, **kwargs):print("log...before")func(*args, **kwargs)print("log...after")return wrapper@no_args_log #无参的装饰器
def add_user(username, password):print(f"username:{username}, password:{password}")add_user(username='王兆玮', password="111")print("-----------------------------------------有参装饰器")#3.有参装饰器 --- 案例:在添加日志时,增加操作员和操作时间
def args_log(operator,time): #传递参数用的函数def decorator(func): #装饰器函数def wrapper(*args, **kwargs):print(f"log...before : {operator}/{time}")func(*args, **kwargs)print(f"log...after : {operator}/{time}")return wrapperreturn decoratorimport time
#定义操作员
operator = "王兆玮"
time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())@args_log(operator,time) #有参装饰器
def add_user(username, password):print(f"新增用户: username:{username} , password:{password}")add_user("尹书婷","123456")print("-----------------------课堂练习")
#课堂练习:请实现用一个装饰器,把函数的返回值 + 100 然后返回
def add(func):def wrapper(*args, **kwargs):res = func(*args, **kwargs)return res + 100return wrapper@add
def return_int(number):return int(number)print(return_int("1"))