关于修饰器,请问教程中的代码为什么不能进一步简化?

2016-09-01 19:47:24 +08:00
 Newyorkcity
因为不会用社区的语法来缩进,所以只能放图,望谅解
这个是自学的教程上提供的代码:


我觉得 warpper 这一层的存在没有必要,可以简化掉
因为加了装饰器之后 now() = log(text)(now)()对吧
那 log(text)(now)()在 Log 函数执行完后变成 decorator(now)()
此时直接让 decorator(now)执行完成变为 now()不就可以了么?
所以直接让 decorator 的 return 为 func 不就结了?

尝试了一下,是可以输出我想要的东西的...这样我就更加不明白了

请问我的想法哪里错了呢?谢谢.
3374 次点击
所在节点    Python
25 条回复
kamen
2016-09-02 11:46:22 +08:00
有一本 python 的书,对这些高级的用法讲得很详细,讲得也很浅明易懂,我当初看文档也是一脸懵逼,看了这本书就豁然开朗了,我记得 v2 有人翻译了这本书,放在了 gitbook
longchisihai
2016-09-02 12:37:17 +08:00
@kamen 啥书呀?能帮忙找找不?
kamen
2016-09-02 14:40:11 +08:00
你呀,还需要提高自身的姿势水平,我说这么多就是因为我当时不方便找,需要你自己用我的关键字去找。
Google 搜索 gitbook,点击 explore ,搜索 python ,以 most stars 排序,第一个是一看就是讲基础的,第二个一看就是讲高级用法的,然后就不用我说了吧。
Allianzcortex
2016-09-04 18:04:39 +08:00
好问题啊。 LZ 难道没有发现需要两层装饰器的都是以 fn 为参数,而需要三层装饰器的都是在第二个返回函数里以 fn 作为参数? decorator 和 decorator with arguments 是不同的思路,看这个: http://stackoverflow.com/questions/5929107/python-decorators-with-parameters
Allianzcortex
2016-09-04 18:05:36 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303301

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX