python装饰器带括号和不带括号的语法和用法
装饰器的写法补充:
通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号。下面通过两个例子还看。
一般装饰器的写法:
def log(func=None): def inner(*args, **kwargs):
print('do something before')
res = func(*args, **kwargs)
print('do something after')
return rees return inner #使用装饰器
@log()
def my_func():
print('i am my_func') #运行这个函数
my_func()
运行结果:
do something before
i am my_func
do something after
可以不带括号的装饰器写法
需要增加判断在函数内,用于判断使用装饰器的函数是否可以调用,以达到括号的自由写法
判断的装饰器写法
def log(func=None): #需要再次嵌套一层装饰器,才可以供下面运行时使用
def wrapper(fun)
def inner(*args, **kwargs):
print('do something before')
res = fun(*args, **kwargs)
print('do something after')
return rees return inner #判断func(参数):
if func is None:
return wrapper #如果func是可以调用的函数
elif callable(func):
return wrapper(func) #使用装饰器的时候,两种写法都可以运行 第一种不带括号:
@log
def my_func():
print('i am my_func') 第二种带括号的:
@log()
def my_func():
print('i am my_func') #运行这个函数
my_func()
两种方式的一样,运行结果:
1 do something before
2 i am my_func
3 do something after
不带括号的理解:
@log =>等同于 my_func = log(my_func)
带括号的理解:
@log() =>等同于 my_func = log()(my_func)
结论: 内嵌之后,可以增加判断条件,增加了装饰器的灵活性。
python装饰器带括号和不带括号的语法和用法的更多相关文章
- Python装饰器总结,带你几步跨越此坑!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- [python 基础]python装饰器(二)带参数的装饰器以及inspect.getcallargs分析
带参数的装饰器理解无非记住两点: 1.本质不过在基本的装饰器外面再封装一层带参数的函数 2.在使用装饰器语法糖的时候与普通装饰器不同,必须要加()调用,且()内的内容可以省略(当省略时,admin默认 ...
- 转发对python装饰器的理解
[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考 原文 http://blog.csdn.net/sxw3718401/article/details/3951958 ...
- Python装饰器探险
关于python装饰器的理解和用法,推荐廖雪峰老师和这一篇博客以及知乎 以下代码均已手动敲过,看完本篇内容,包你装饰器小成! 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就 ...
- Python 装饰器入门(上)
翻译前想说的话: 这是一篇介绍python装饰器的文章,对比之前看到的类似介绍装饰器的文章,个人认为无人可出其右,文章由浅到深,由函数介绍到装饰器的高级应用,每个介绍必有例子说明.文章太长,看完原文后 ...
- Python装饰器的通俗理解
转载:http://blog.csdn.net/u013471155 在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略 ...
- (一)Python装饰器的通俗理解
在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...
- Python 装饰器初探
Python 装饰器初探 在谈及Python的时候,装饰器一直就是道绕不过去的坎.面试的时候,也经常会被问及装饰器的相关知识.总感觉自己的理解很浅显,不够深刻.是时候做出改变,对Python的装饰器做 ...
- Python装饰器完全解读
1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入理解并应用装饰器,你会更加感慨——人生苦短,我用Python. 2 初步理解装 ...
- Python 装饰器(Decorators) 超详细分类实例
Python装饰器分类 Python 装饰器函数: 是指装饰器本身是函数风格的实现; 函数装饰器: 是指被装饰的目标对象是函数;(目标对象); 装饰器类 : 是指装饰器本身是类风格的实现; 类 ...
随机推荐
- laravel config 配置无效
修改了配置文件config 发现逻辑代码中并无生效. 猜测缓存,所以执行下: php artisan config:cache 缓存文件默认会存在bootstrap/cache 中,并不在stora ...
- win10自带输入法的标点符号切换
快捷键是ctrl+句号 然后开启设置,把中文也用英文标点也选上.
- windows 性能监视器常用计数器
转载地址:https://www.jianshu.com/p/f4406c29542a?utm_campaign=maleskine&utm_content=note&utm_medi ...
- JavaScript日历(es5版本)
近期在知乎上看到这么一个帖子,题主说自己JavaScript都学完了,结果老师留的作业还是不会写,就是写一个日历的插件,结果楼下一堆大牛出现了,百度的阿里的纷纷站出来发表自己的看法,有人认为简单,有人 ...
- Eclipse添加JDK,JRE切换
Eclipse添加JDK Window---preferences 切换JDK,JRE
- boost-字符文本处理
1.lexical_cast 一些常见的数值,字符互转函数: 整型int: itoa()._itoa_s atoi()._ttoi 无符号整型unsigned int: _ultoa_s()._ult ...
- mysql常用连接查询
连接数据库PDO $user = "root"; //数据库连接账号 $pass = "root"; //数据库连接密码 $dbname = "tes ...
- JAVA核心问题(一)反射之引言 构造函数
反射,简单来说,就是在运行时获取Class对象的所有属性和方法,无论公有私有.虽然是一个基础问题,在这里还是全面的记录一下,认真对待! 获取构造函数 构造函数大致分为两种,public和非public ...
- 用Dockerfile创建镜像--自动化部署tomcat+mysql+mycat
https://www.jianshu.com/p/a14b34386b41
- Oracle 异常 中文乱码
环境变量 NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16GBK