python-day4-装饰器的使用
Posted ppppppy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-day4-装饰器的使用相关的知识,希望对你有一定的参考价值。
摘要:某公司的基础开发平台,有大概N多个函数,boss要求小A,为每个函数添加权限验证功能,而且要求不得修改函数内部结构,让小A尝试从代码外部入手,作为新手小A来讲,这无疑是一个巨大的工作量,难道TM的要一个一个加到里面不可么~~~~生无可恋的小A无奈的望着桌面,在扫过谷歌浏览器图标的那一刻,突然一紧,于是机智的打开谷歌搜索,欲寻到一个简单的方法,经过搜索在一个叫银角大王的lowB博客里面找到了一个叫做装饰器的东东,然后耐心的看了下去……
图解python装饰器的执行流程
1 #装饰器的使用 2 # 自动执行outer函数并且将其下面的函数名f1当作参数传递 3 # 将outer函数的返回值,重新赋值给f1 4 # 1、遇到def outer(func) 加载到内存,跳过函数体 5 # 2、遇到@outer,将f1作为参数传入func中 6 # 3、遇到def inner():将函数加载到内存跳过函数体 7 # 4、遇到return inner,将inner函数作为整体,赋值给f1 8 # 5、遇到f1(),调用inner函数体,执行print(‘log’) 9 # 6、遇到return func() 执行作为参数传入func中的老的f1函数的函数体print(\'F1\') 10 # 7、遇到return \'lululu\'将lululu传回f1()中 11 def outer(func): 12 def inner(): 13 print(\'log\') 14 return func() 15 return inner 16 @outer 17 def f1(): 18 print(\'F1\') 19 return \'lululu\' 20 print(f1()) 21 >>>log 22 >>>F1 23 >>>lululu
#带参数的传递 def outer(func): def inner(a): print(\'before\') r=func(a) print(\'after\') return r return inner @outer def f1(arg): print(arg) return \'lululu\' print(f1(\'huhuh\')) >>>before >>>huhuh >>>after >>>lululu #万能参数传递 def outer(func): def inner(*args,**kwargs): print(\'before\') r=func(*args,**kwargs) print(\'after\') return r return inner @outer def f1(arg): print(\'f1函数体\',arg) return \'lululu\' print(\'返回值\',f1(\'huhuhu\')) >>>before >>>f1函数体 huhuhu >>>after >>>返回值 lululu @outer def f2(a1,a2): print(\'f2函数体\',\'F2\') return \'aa\' \'bb\' print(\'返回值\',f2(\'hu\',\'lu\')) >>>before >>>f2函数体 F2 >>>after >>>返回值 aabb
以上是关于python-day4-装饰器的使用的主要内容,如果未能解决你的问题,请参考以下文章