123、执行的时候就会运行语法糖
4、执行的时候就会运行语法糖的上半部分,内置函数不执行,在你调用你这个被修饰的函数的时候注解内部函数会执行
5、执行的时候就会运行语法糖的上半部分,内置函数执行带函数参数的(func),在你调用你这个被修饰的函数的时候注解的最内部函数会执行
6、只在开始的时候执行多加的东西
7、在5的基础上只修改了原本调用函数的参数值
# desA这个参数其实就是使用这个@符号的函数:funA(funC)
def funA(desA):
print("It's funA")
def funB(desB):
print("It's funB")
@funA
def funC():
print("It's funC")
def test(func):
print("a")
return func()
@test
def xxx():
print('Hello world!')
或者
def test(func):
func()
print("a")
@test
def xxx():
print('Hello world!')
def funA(desA):
print("It's funA")
print('---')
print(desA)
desA()
print('---')
def funB(desB):
print("It's funB")
@funB
@funA
def funC():
print("It's funC")
1、上述代码@funA的desA是有值的@funB是无值的
2、执行由下到上去执行的
def funA(desA):
def wrapper():
desA()
return wrapper
@funA
def funC():
print("It's funC")
if __name__ == '__main__':
funC()
1、启动先执行funA
2、在调用函数funC()再执行内置函数wrapper
def log(text,aaa):
print('Jason')
def decorator(func):
print('Cool')
def wrapper():
print('%s %s():' % (text, func.__name__))
return func()
return wrapper
return decorator
@log('execute',111)
def now():
print('2015-3-25')
now()
now()
1、先执行log函数
2、再执行decorator
3、在使用now()函数才执行wrapper
def log(text,aaa):
print('Jason')
def decorator(func):
print("xxx")
return func
print("zzz")
return decorator
@log('execute',111)
def now():
print('2015-3-25')
now()
now()
def log(text):
print('Jason')
def decorator(func):
print('Cool')
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
print(args)
#如果原封不动传递的话就可以func(*args, **kw)
return func(('1234'), **kw)
return wrapper
return decorator
@log('execute')
def now(xxxx):
print('2015-3-25', xxxx)
now(123)
1、 5基础上只修改了now的参数值
2、 忙才这个kw是**作为函数传递参数值的时候的值