n******r 发帖数: 869 | 1 感叹一下。
平常编程不多,各种语言都只是皮毛。
http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-
写得很清楚,算是学懂了吧,还补了不少知识。主要是要看懂production code.学语言
真要耐心啊。 |
i***r 发帖数: 1035 | |
n******r 发帖数: 869 | 3 再来看一遍,还是觉得难,confuse的从9 decorate开始用那个class coordinate。一
看就走神。 |
c********l 发帖数: 8138 | 4 我看一遍就会了。这个教程写得挺深入简出的,
而且还交待了scope, lifecycle这些基本概念。
Coordinate class就是一个最straightforward的结构,没有任何fancy的地方
add和sub就是C++中的一个方法重载(我的术语可能用得不对,你将就着看)
实际上也没什么复杂的,add就是把两个coordinate按X和Y分别相加,得到一个新座标
而sub就是分别相减得到一个结果。
其实关于closure:最关键的概念在于:对于function 中使用到的外部变量,
实际上所取的值是定义该function时的当时的值;
而不是在function运行时的值,因为这时候那个var很有可能已经死了
【在 n******r 的大作中提到】 : 再来看一遍,还是觉得难,confuse的从9 decorate开始用那个class coordinate。一 : 看就走神。
|
a*****e 发帖数: 1700 | 5 Python/Perl/JS 闭包实现的陷阱:
http://me.veekun.com/blog/2011/04/24/gotcha-python-scoping-clos
事实上,闭包在命令式语言中的语义并无准确定义,在 Ruby/Lua/Java/C#/C++/C 里面
的实现也不会更清晰。
在函数语言里,默认变量的值是不可改变的,闭包语义简单直观,完全没有类似的坑。
【在 c********l 的大作中提到】 : 我看一遍就会了。这个教程写得挺深入简出的, : 而且还交待了scope, lifecycle这些基本概念。 : Coordinate class就是一个最straightforward的结构,没有任何fancy的地方 : add和sub就是C++中的一个方法重载(我的术语可能用得不对,你将就着看) : 实际上也没什么复杂的,add就是把两个coordinate按X和Y分别相加,得到一个新座标 : 而sub就是分别相减得到一个结果。 : 其实关于closure:最关键的概念在于:对于function 中使用到的外部变量, : 实际上所取的值是定义该function时的当时的值; : 而不是在function运行时的值,因为这时候那个var很有可能已经死了
|
c********l 发帖数: 8138 | 6 学习了
【在 a*****e 的大作中提到】 : Python/Perl/JS 闭包实现的陷阱: : http://me.veekun.com/blog/2011/04/24/gotcha-python-scoping-clos : 事实上,闭包在命令式语言中的语义并无准确定义,在 Ruby/Lua/Java/C#/C++/C 里面 : 的实现也不会更清晰。 : 在函数语言里,默认变量的值是不可改变的,闭包语义简单直观,完全没有类似的坑。
|
c********l 发帖数: 8138 | 7 关于js闭包的陷阱,我学了总忘,再学再忘
java的好处就在这儿,从来没有这种ambiguity和trap
不过有一个陷阱好处,
等俺把这玩意搞熟了,当面试官的时候拿出去问阿三的candidate,一黑一个准。
【在 a*****e 的大作中提到】 : Python/Perl/JS 闭包实现的陷阱: : http://me.veekun.com/blog/2011/04/24/gotcha-python-scoping-clos : 事实上,闭包在命令式语言中的语义并无准确定义,在 Ruby/Lua/Java/C#/C++/C 里面 : 的实现也不会更清晰。 : 在函数语言里,默认变量的值是不可改变的,闭包语义简单直观,完全没有类似的坑。
|
n******r 发帖数: 869 | 8 看也看懂了。
就怕现实中不会应用自如--写不出来。
或者看别人的code类似的结构比较费劲。
【在 c********l 的大作中提到】 : 我看一遍就会了。这个教程写得挺深入简出的, : 而且还交待了scope, lifecycle这些基本概念。 : Coordinate class就是一个最straightforward的结构,没有任何fancy的地方 : add和sub就是C++中的一个方法重载(我的术语可能用得不对,你将就着看) : 实际上也没什么复杂的,add就是把两个coordinate按X和Y分别相加,得到一个新座标 : 而sub就是分别相减得到一个结果。 : 其实关于closure:最关键的概念在于:对于function 中使用到的外部变量, : 实际上所取的值是定义该function时的当时的值; : 而不是在function运行时的值,因为这时候那个var很有可能已经死了
|
|
c********l 发帖数: 8138 | 9 没错,之前一个链接“inner函数中的值在def时被决定”的说法其实是错误的
这个链接在the other solution中扯什么:
“times_called 被implicit定义”其实也不准确
实际上python对闭包的正确定义是:
1,闭包是对所引用variable的一个reference。
当variable自身改变时,所有指向它的reference在runtime的值也会跟着变化。
2,这个reference比较特殊,immutable,只能读,无法改变其值
3,如果需要构造不同的闭包,
可以用值传参copy的方式,或者default value的方式(建议前者)
但一次执行时值还是immutable
4,终极方法是python 3中的nonlocal ,类似于php中的global
【在 a*****e 的大作中提到】 : Python/Perl/JS 闭包实现的陷阱: : http://me.veekun.com/blog/2011/04/24/gotcha-python-scoping-clos : 事实上,闭包在命令式语言中的语义并无准确定义,在 Ruby/Lua/Java/C#/C++/C 里面 : 的实现也不会更清晰。 : 在函数语言里,默认变量的值是不可改变的,闭包语义简单直观,完全没有类似的坑。
|
z*******3 发帖数: 13709 | 10 精辟
【在 c********l 的大作中提到】 : 关于js闭包的陷阱,我学了总忘,再学再忘 : java的好处就在这儿,从来没有这种ambiguity和trap : 不过有一个陷阱好处, : 等俺把这玩意搞熟了,当面试官的时候拿出去问阿三的candidate,一黑一个准。
|
c*****e 发帖数: 3226 | 11 python 一些概念很复杂,我觉得比 java 难,说python 容易的,用的只是皮毛!
【在 n******r 的大作中提到】 : 感叹一下。 : 平常编程不多,各种语言都只是皮毛。 : http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in- : 写得很清楚,算是学懂了吧,还补了不少知识。主要是要看懂production code.学语言 : 真要耐心啊。
|
z*******3 发帖数: 13709 | 12 这种presentation我很喜欢
深入浅出,一个复杂的东西被说得很简单
讨厌老魏那种,浅入深出,废话说了半天
就做了一个计数器出来,简直是闹剧
【在 c********l 的大作中提到】 : 没错,之前一个链接“inner函数中的值在def时被决定”的说法其实是错误的 : 这个链接在the other solution中扯什么: : “times_called 被implicit定义”其实也不准确 : 实际上python对闭包的正确定义是: : 1,闭包是对所引用variable的一个reference。 : 当variable自身改变时,所有指向它的reference在runtime的值也会跟着变化。 : 2,这个reference比较特殊,immutable,只能读,无法改变其值 : 3,如果需要构造不同的闭包, : 可以用值传参copy的方式,或者default value的方式(建议前者) : 但一次执行时值还是immutable
|
z*******3 发帖数: 13709 | 13 图的不就是它的简洁容易上手么?
如果复杂的话,也就不用python了
【在 c*****e 的大作中提到】 : python 一些概念很复杂,我觉得比 java 难,说python 容易的,用的只是皮毛!
|