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