python与lua闭包的一点不同
2012-10-09 13:45
295 查看
python与lua都支持闭包(closure),但是两者的实现有所不同,导致运行结果也不同,使用时要注意区分。
例子
python版
相应的执行结果为
这其实与我们预期的结果是不一样的,我们更期望它输出1,2,3...10,这样比较符合常理。这里,i仅仅只是在closure中的一个引用而已,指向的依然是同一个对象。当这个对象被改变,所有的t执行的时候获得的值都是修改后的值。
与之类似的lua版
执行结果为
这里和通常的预期一致。因此,lua对函数式编程的支持要比Python好一些,python强大在OO方面,不建议以FP的方式来使用它,否则可以用OCaml、F#、Haskell等来完成。
例子
python版
def T(): r = [] for i in xrange(10): def f(): return i r.append(f) return r t = T() for i in xrange(10): print t[i], t[i]()
相应的执行结果为
这其实与我们预期的结果是不一样的,我们更期望它输出1,2,3...10,这样比较符合常理。这里,i仅仅只是在closure中的一个引用而已,指向的依然是同一个对象。当这个对象被改变,所有的t执行的时候获得的值都是修改后的值。
与之类似的lua版
function T() r = {} for i = 1, 10 do function f() return i end table.insert(r, f) end return r end t = T() for i = 1, 10 do print(t[i], t[i]()) end
执行结果为
这里和通常的预期一致。因此,lua对函数式编程的支持要比Python好一些,python强大在OO方面,不建议以FP的方式来使用它,否则可以用OCaml、F#、Haskell等来完成。
相关文章推荐
- Python和Lua的默认作用域以及闭包
- python2.7与python3中print的一点不同之处
- python-闭包概念和append()和extend()的不同
- 【吐槽】关于python和lua的一点浅见
- [通用技术]在不同语言中用协程实现全排列算法(C++/Lua/Python/C#)
- 原来 JS 也支持跟 Lua 语意一样的内嵌函数的闭包概念
- 开发中发现IE与FireFox的一点不同
- Lua数据结构 — 闭包(四)
- 思维导图の 近两日极为纠结——游戏服务器,选择何种技术方案?(Python + SWIG--RakNet + Lua)
- Python闭包的高级应用-装饰器的实现
- python的&众不同之处(3)
- IE和Firefox下javascript的一点不同收藏
- numpy线性代数基础 - Python和MATLAB矩阵处理的不同
- python循环语句与其他编程语言不同之处
- 关于python中变量的一点小推测
- Python输入 raw_input()/input() 与 sys.stdin.readline()的不同
- C++, LUA, PYTHON, BASH混用
- Python 的类的下划线命名有什么不同?
- Python 中的作用域规则和闭包简析
- Python之闭包