boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 学了python的decorators
相关主题
对 (im)mutability 的误解和深度理解
怎么这里这么多人学python
Python Q: function pass in struct pointer, come back with data filled
Duck typing is great ...
看到python的multiprocessing心中一痛
忙起来了
学了一圈lisp, haskell, ruby ,python, lua.发觉还是后两者比较有用
FP更接近人的思维
这次python完胜?
花了一个小时学习了python
相关话题的讨论汇总
话题: python话题: decorators话题: 闭包话题: 学了话题: coordinate
进入Programming版参与讨论
1 (共1页)
n******r
发帖数: 869
1
感叹一下。
平常编程不多,各种语言都只是皮毛。
http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-
写得很清楚,算是学懂了吧,还补了不少知识。主要是要看懂production code.学语言
真要耐心啊。
i***r
发帖数: 1035
2
多谢,break down很清楚
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 容易的,用的只是皮毛!
1 (共1页)
进入Programming版参与讨论
相关主题
花了一个小时学习了python
没人觉得python的string是immutable不爽吗?
python 区别于其他语言的根本?
python的gc做得不如java 好
牛人们来看看这个Dao语言怎么样
各个编程语言平均工资(ZT)
Paypal抛弃Java是因为Douglas Crockford吗?
vert.x也支持redis
感觉go最无聊的就是
根据调研以及好虫建议
相关话题的讨论汇总
话题: python话题: decorators话题: 闭包话题: 学了话题: coordinate