python装饰器
来源:互联网 发布:成都租房 知乎 编辑:程序博客网 时间:2024/06/08 05:36
廖大大留了一道题:写出一个@log的decorator,使它既支持:
@logdef f(): pass
又支持:
@log('execute')def f(): pass
尝试用判断可变参数的长度是否为零来分类输出,但是失败,因为本质上还是第二种情况。参考了网友的答案,如下:
def log(strorfunction): if isinstance(strorfunction,str): def decorator(func): def wrapper(*args,**kw): print('var has coming in!') func(*args,**kw) return wrapper return decorator else: def wrapper(*args,**kw): print('wo don\'t hava var') strorfunction(*args,**kw) return wrapper
上面的程序有助于加深我们对装饰器的理解
**
- 无论是第一种还是第二种情况,都会在@开始后传入变量(函数也是一个变量),不同的是传入变量的值的类型不同
- 装饰器的调用顺序可以从程序下面的返回顺序往上递推,进入主函数后,首先观察最下面的 return,就可以看清装饰器整个的工作流程
- 通过理解第二部装饰器的流程,写程序的时候就可以很从容的写出你想要的装饰器
**
阅读全文
0 0
- python装饰器装饰类
- [python]python装饰器
- Python装饰器学习
- Python装饰器
- python 装饰器
- Python装饰器
- python 装饰器 应用
- python 装饰器2
- Python装饰器学习
- python装饰器
- python装饰器
- python 装饰器入门
- python装饰器
- python装饰器
- python 装饰器'@'
- python装饰器
- Python装饰器详解
- python 装饰器
- 解决 Pod install 问题:cannot load such file -- cfpropertylist
- Android学习十 多媒体
- Struts2拦截器的实现
- Linux内存管理详细解析
- LeetCode——Hamming Distance
- python装饰器
- leetcode 找到树中距离最大的两个结点,Python实现
- JS检测设备类型
- 分块查找
- 中国大学慕课C语言第五讲作业
- vc++ ios::in ios::out 含义
- ptmalloc
- JAVA反射机制
- springboot笔记