python-day4-装饰器的使用
2024-08-29 14:18:02
摘要:某公司的基础开发平台,有大概N多个函数,boss要求小A,为每个函数添加权限验证功能,而且要求不得修改函数内部结构,让小A尝试从代码外部入手,作为新手小A来讲,这无疑是一个巨大的工作量,难道TM的要一个一个加到里面不可么~~~~生无可恋的小A无奈的望着桌面,在扫过谷歌浏览器图标的那一刻,突然一紧,于是机智的打开谷歌搜索,欲寻到一个简单的方法,经过搜索在一个叫银角大王的lowB博客里面找到了一个叫做装饰器的东东,然后耐心的看了下去……
图解python装饰器的执行流程
#装饰器的使用
# 自动执行outer函数并且将其下面的函数名f1当作参数传递
# 将outer函数的返回值,重新赋值给f1
# 1、遇到def outer(func) 加载到内存,跳过函数体
# 2、遇到@outer,将f1作为参数传入func中
# 3、遇到def inner():将函数加载到内存跳过函数体
# 4、遇到return inner,将inner函数作为整体,赋值给f1
# 5、遇到f1(),调用inner函数体,执行print(‘log’)
# 6、遇到return func() 执行作为参数传入func中的老的f1函数的函数体print('F1')
# 7、遇到return 'lululu'将lululu传回f1()中
def outer(func):
def inner():
print('log')
return func()
return inner
@outer
def f1():
print('F1')
return 'lululu'
print(f1())
>>>log
>>>F1
>>>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
最新文章
- web测试方法总结
- 工作当中实际运用(3)——js原生实现鼠标点击弹出div层 在点击隐藏
- [译]C++, Java和C#的编译过程解析
- 【BZOJ】1090: [SCOI2003]字符串折叠(dp)
- css 前景色与背景色
- php unserialize 返回false的解决方法
- HTTP代理协议 HTTP/1.1的CONNECT方法
- ibatis 到 MyBatis区别
- Android JNI使用方法
- poj 2094 多项式求和。
- 用 monitorix 开启linux图形化监控
- 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)
- 利用python基于微博数据打造一颗“心”
- JavaScript中函数function fun(){}和 var fun=function(){}的区别
- 从内部入手,浅谈malloc和new的区别
- LeetCode题解之Squares of a Sorted Array
- indexedDB为何物
- 第四篇 HTTP请求返回状态码收集及解释
- Cookies Client Identification
- Class.forName和ClassLoader的区别