python与lua都支持闭包(closure),但是两者的实现有所不同,导致运行结果也不同,使用时要注意区分。

例子

python版

 1 def T():
 2     r = []
 3     for i in xrange(10):
 4         def f():
 5             return i
 6         r.append(f)
 7     return r
 8
 9 t = T()
10 for i in xrange(10):
11     print t[i], t[i]()

相应的执行结果为

这其实与我们预期的结果是不一样的,我们更期望它输出1,2,3...10,这样比较符合常理。这里,i仅仅只是在closure中的一个引用而已,指向的依然是同一个对象。当这个对象被改变,所有的t执行的时候获得的值都是修改后的值。

与之类似的lua版

 1 function T()
 2     r = {}
 3     for i = 1, 10 do
 4         function f()
 5             return i
 6         end
 7         table.insert(r, f)
 8     end
 9     return r
10 end
11
12 t = T()
13 for i = 1, 10 do
14     print(t[i], t[i]())
15 end

执行结果为

这里和通常的预期一致。因此,lua对函数式编程的支持要比Python好一些,python强大在OO方面,不建议以FP的方式来使用它,否则可以用OCaml、F#、Haskell等来完成。

转载于:https://www.cnblogs.com/njucslzh/archive/2012/10/09/2716490.html

python与lua闭包的一点不同相关推荐

  1. python闭包的应用场景_简单谈谈Python中的闭包

    Python中的闭包 前几天又有人留言,关于其中一个闭包和re.sub的使用不太清楚.我在脚本之家搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善Python的内容. 1. 闭包的概念 首 ...

  2. Python 和 Lua 学习比较 一

    好记性不如烂笔头. 作的笔记以后也能来再看看. python有多种语言写成的版本,这里只记录C/C++写的版本,lua本身是使用标准C/C++编写的. 所以各位同学知道C的强大了吧,我觉得作为程序员, ...

  3. Python中的闭包

    (如转载,请注明出处,谢谢.) 闭包这个概念在很多语言中都有涉及,本文主要谈谈python中的闭包.Python中使用闭包主要是在进行函数式开发时使用. 一,定义 python中的闭包从表现形式上定义 ...

  4. Python 中的闭包介绍

    引言 闭包是优雅的 Python 结构.在本文中,我们将了解它们,如何定义闭包,为什么以及何时使用它们. 但是在讨论什么是闭包之前,我们必须首先理解什么是嵌套函数,以及作用域规则是如何为它们工作的.那 ...

  5. C++之python和Lua脚本语言

    文章目录 Python Lua C++ 高效.灵活,但开发周期长.成本高,在混合系统里可以辅助其他语言,编写各种底层模块提供扩展功能,从而扬长避短: pybind11 是一个优秀的 C++/Pytho ...

  6. Python、Lua和Ruby比较——脚本语言大P.K.

    译者按:Python.lua和ruby在C/C++是日渐式微的情况下,在java/.net的围歼中努力抗争的三个当红小生.在Tom Gutschmidt的著作<Game Programmng w ...

  7. python和lua哪个有前途_(转)LUA与python根本就不具有可比性

    网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下: 1.两者的定位不同.python的定位在于自身的独立开发,即是说python定位于 ...

  8. Python 中的闭包、匿名函数、decorator 装饰器与python的偏函数

    Python中的闭包 def calc_sum(lst):def lazy_sum():return sum(lst)return lazy_sum 像这种内层函数引用了外层函数的变量(参数也算变量) ...

  9. python闭包详解函数_详解python函数的闭包问题(内部函数与外部函数详述)

    python函数的闭包问题(内嵌函数) >>> def func1(): ... print ('func1 running...') ... def func2(): ... pr ...

最新文章

  1. 生了娃照样能打,两位母亲温网会师
  2. WinForm之创建word并操作文档
  3. 赞!超炫的页面切换动画效果【附源码下载】
  4. js,jq.事件代理(事件委托)复习。
  5. Python suds error “'NoneType' object has no attribute 'promotePrefixes'”
  6. 1299. 将每个元素替换为右侧最大元素
  7. 分布式设计模式中的Quorum思想
  8. android自定义选年控件,Android精美日历控件CalendarView自定义使用完全解析
  9. windows .bat批处理实现进程监控确保程序运行
  10. linux把一个文件拷贝到另一个目录,linux把某个文件拷贝到不同的目录下面
  11. 用 PS 去除图片中文字的方法
  12. MongoDB分片集群搭建
  13. c语言链表删除重复点,【图片】想问一道链表题,如何删除重复元素【c语言吧】_百度贴吧...
  14. Matplotlib颜色、线宽、线型、透明度、点型
  15. 全球知名的人工智能研究院(实验室)
  16. 阿里云配置小程序证书 https总结
  17. [全程建模]迭代与瀑布对立统一(两者的最大区别)
  18. 章丘谋定大葱功能性-农业大健康·万祥军:不当村官当会长
  19. 防疫机器人,走向抗疫前线——科聪整体解决方案助力智能防疫
  20. TAPA认证辅导,将TAPA FSR纳入ISO9000质量管理体系中有什么改变

热门文章

  1. NUS 联合 Sea AI Lab 发表 Multi-view Pose Transformer,完全端到端学习,超强可扩展性...
  2. AAAI2021 大运动“视频超分辨”中的对偶子网与多阶通信上采样方案
  3. 万元大奖,FlyAI算法新赛事,心理卡牌目标检测
  4. 数据太少怎么办?试试自监督学习,CV训练新利器,fast.ai新教程,LeCun点评
  5. 3D建模学什么?细分的话,有这么多方向
  6. 2018 年度人工智能热门事件大盘点:「悲喜交加」
  7. Nvidia GPU驱动与CUDA、Ubuntu内核兼容性问题的解决日志
  8. TF使用例子-情感分类
  9. 数据结构(十七)最小生成树
  10. Android把数组从大到小排列,Android SparseArray 排序