之前理解 python 装饰器等于是在函数执行前先执行装饰器函数,但是直接写一个函数调用或者写回调函数比有什么区别呢?
|
CabanaAug 8, 2016 via Android
1
能写在一行里(逃…
|
|
greenletAug 8, 2016
2
功能上没区别,看上去更自然。
|
|
lixmAug 8, 2016
3
AOP
|
|
justouAug 8, 2016
4
装饰器模式的好处
|
|
mgna17Aug 8, 2016 via Android
5
先后顺序的差别吧,装饰器总是比被装饰函数先执行,它可以决定如何使用被装饰函数。
|
|
wizardforcelAug 8, 2016
6
是在函数定义后以函数作为参数执行装饰器函数,返回值还绑定到原来的名字上。
|
|
7
我在实际当中使用过的一个情形:
有一大批函数都需要做相同或相似的参数检查, 每个函数里面都检查会造成大量重复代码, 那么就把检查部分提出来放到一个检查函数, 而这个检查函数返回的是经过参数检查的一系列函数, 也就是函数返回函数, python 里自然就是装饰器了, 只需要在那一系列函数上方套一个 @check_func, 调用这一系列函数就自动完成参数检查了: 避免了重复代码, 避免了到处都要手动调用一个检查函数 |
|
am241Aug 8, 2016 via Android
8
为了思路清晰
|
|
lichunAug 8, 2016
9
完全可以把 "@" 当做语法糖,也可以直接使⽤用函数式写法。只不过那样不便于代码维护
|
|
xrlinAug 8, 2016
10
方便进行维护,而且程序更清晰,很方便给其他函数添加额外的功能。
|
|
murmurAug 8, 2016
11
如果能用装饰器上的功能 需要的时候 去掉装饰器一样很容易
|
|
YinzAug 8, 2016
12
|
|
julyclydeAug 8, 2016
13
不是执行函数前先执行装饰器
而是在声明函数时先执行装饰器,然后用装饰器输出的那个函数体代替原来准备声明的那个函数体 |
|
incompatibleAug 8, 2016 via Android
14
关键词: AOP
通常用来实现:记录业务日志、做参数统一检验、做事务管理 |
|
tongjieAug 8, 2016
15
def safe_run(_logger):
def _run_once(func): def f(*args,**kwargs): try: return func(*args,**kwargs) except: _logger.error(traceback.format_exc()) return f return _run_once 在要执行的方法前面加上这个装饰器,放心多了; |
|
BOYPTAug 8, 2016
16
你们说那么多,还不如看看 flask 或者 bottle 框架是怎么用的,瞬间明白装饰器的好处了。
|
|
will0404Aug 8, 2016 via iPhone
17
只是好看一点罢了 和写在函数里调用返回个函数没什么区别 类似蛋疼的 feature 还有 js 里的 promise 大张旗鼓的被实现出来实际呢只是让嵌套回调好看一点 个人灼见
|
|
SayHaHaAug 9, 2016
18
语法糖,复用方便
|
|
hosietAug 9, 2016 via Android
19
14 楼的用法基本就是九成的使用场景,只要写一次装饰器就可以到处使用,概念清晰易理解,何乐而不为呢
|
|
xiaketAug 9, 2016
20
readability counts.
|
|
ziXiongAug 9, 2016
21
代码重用,也可以完全改变被装饰函数的行为。很灵活的。
|
|
zhujqAug 9, 2016
22
用上比不用上更能装逼
|