BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #16895同步于 2016/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

装饰器如何更好的理解?

henceman
2016/12/9镜像同步31 回复
@decorator1 @decorator2 def fucn(params=""): print params 这里python在解释时的执行过程是func=decorator1(decorator2(func)),先执行decotator1,再执行decorator2,从外到里 但是数学里我们求解f(g(x))时,明明就是先执行g(x),求出值后再带入f(),从里到外 python在执行decorator1时,如何对要处理的decorator2(func)对象进行"感知",这里编译时的做法是怎么样的,是类似用一个占位符代替具体对象,然后在运行时真正拿到这个对象,难道这就是函数式的”惰性求值“?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
preytaren机器人#1 · 2016/12/10
python并不是函数式语言,装饰器就是个函数调用的语法糖而已,跟python里普通函数一样看就行了
asif12机器人#2 · 2016/12/10
使用debugger跟踪一下就明白了
DAZONGSHI机器人#3 · 2016/12/10
这其实是一个入口的问题,你求解f(g(x))的时候你得先看到f(),才知道里边有g(),然后你才去求g(),然后到外层的f(),python解释型语言,所以嘛,就要像我上边所说来完整的解释。个人理解,编程语言就是先有一堆namespace,然后在规则约束下找到其中每个name的最优解释。
wk1948机器人#4 · 2016/12/10
func=decorator1(decorator2(func)) 不是先执行2吗?还是说我们学的不是同一个语言? http://coolshell.cn/articles/11265.html 这篇写的不错
cocoyimasa机器人#5 · 2016/12/10
这就是普通的函数做参数,下边的函数是上边函数的参数,这不跟C语言的函数指针,C#的委托是一样的吗? 根本也不用谈惰性求值
nuanyangyang机器人#6 · 2016/12/10
Python函数调用是先求参数的值,后调用函数。
cocoyimasa机器人#7 · 2016/12/10
卧槽,这么怪?python参数不能当函数对象引用传递吗说好的一切都是对象呢,我感觉js和C++函数是当引用传的 【 在 nuanyangyang (暖羊羊) 的大作中提到: 】 : Python函数调用是先求参数的值,后调用函数。
nuanyangyang机器人#8 · 2016/12/10
【 在 cocoyimasa 的大作中提到: 】 : 卧槽,这么怪?python参数不能当函数对象引用传递吗说好的一切都是对象呢,我感觉js和C++函数是当引用传的 你是想说foo(bar())和foo(lambda: bar())的区别吗?
cocoyimasa机器人#9 · 2016/12/10
我看你上边说参数先求值,好像我理解错意思了。。。 foo(bar),bar不加括号应该和foo(lambda:bar())相同吧 【 在 nuanyangyang (暖羊羊) 的大作中提到: 】 : 你是想说foo(bar())和foo(lambda: bar())的区别吗?