python与lua闭包的一点不同
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闭包的一点不同相关推荐
- python闭包的应用场景_简单谈谈Python中的闭包
Python中的闭包 前几天又有人留言,关于其中一个闭包和re.sub的使用不太清楚.我在脚本之家搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善Python的内容. 1. 闭包的概念 首 ...
- Python 和 Lua 学习比较 一
好记性不如烂笔头. 作的笔记以后也能来再看看. python有多种语言写成的版本,这里只记录C/C++写的版本,lua本身是使用标准C/C++编写的. 所以各位同学知道C的强大了吧,我觉得作为程序员, ...
- Python中的闭包
(如转载,请注明出处,谢谢.) 闭包这个概念在很多语言中都有涉及,本文主要谈谈python中的闭包.Python中使用闭包主要是在进行函数式开发时使用. 一,定义 python中的闭包从表现形式上定义 ...
- Python 中的闭包介绍
引言 闭包是优雅的 Python 结构.在本文中,我们将了解它们,如何定义闭包,为什么以及何时使用它们. 但是在讨论什么是闭包之前,我们必须首先理解什么是嵌套函数,以及作用域规则是如何为它们工作的.那 ...
- C++之python和Lua脚本语言
文章目录 Python Lua C++ 高效.灵活,但开发周期长.成本高,在混合系统里可以辅助其他语言,编写各种底层模块提供扩展功能,从而扬长避短: pybind11 是一个优秀的 C++/Pytho ...
- Python、Lua和Ruby比较——脚本语言大P.K.
译者按:Python.lua和ruby在C/C++是日渐式微的情况下,在java/.net的围歼中努力抗争的三个当红小生.在Tom Gutschmidt的著作<Game Programmng w ...
- python和lua哪个有前途_(转)LUA与python根本就不具有可比性
网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下: 1.两者的定位不同.python的定位在于自身的独立开发,即是说python定位于 ...
- Python 中的闭包、匿名函数、decorator 装饰器与python的偏函数
Python中的闭包 def calc_sum(lst):def lazy_sum():return sum(lst)return lazy_sum 像这种内层函数引用了外层函数的变量(参数也算变量) ...
- python闭包详解函数_详解python函数的闭包问题(内部函数与外部函数详述)
python函数的闭包问题(内嵌函数) >>> def func1(): ... print ('func1 running...') ... def func2(): ... pr ...
最新文章
- 生了娃照样能打,两位母亲温网会师
- WinForm之创建word并操作文档
- 赞!超炫的页面切换动画效果【附源码下载】
- js,jq.事件代理(事件委托)复习。
- Python suds error “'NoneType' object has no attribute 'promotePrefixes'”
- 1299. 将每个元素替换为右侧最大元素
- 分布式设计模式中的Quorum思想
- android自定义选年控件,Android精美日历控件CalendarView自定义使用完全解析
- windows .bat批处理实现进程监控确保程序运行
- linux把一个文件拷贝到另一个目录,linux把某个文件拷贝到不同的目录下面
- 用 PS 去除图片中文字的方法
- MongoDB分片集群搭建
- c语言链表删除重复点,【图片】想问一道链表题,如何删除重复元素【c语言吧】_百度贴吧...
- Matplotlib颜色、线宽、线型、透明度、点型
- 全球知名的人工智能研究院(实验室)
- 阿里云配置小程序证书 https总结
- [全程建模]迭代与瀑布对立统一(两者的最大区别)
- 章丘谋定大葱功能性-农业大健康·万祥军:不当村官当会长
- 防疫机器人,走向抗疫前线——科聪整体解决方案助力智能防疫
- TAPA认证辅导,将TAPA FSR纳入ISO9000质量管理体系中有什么改变
热门文章
- NUS 联合 Sea AI Lab 发表 Multi-view Pose Transformer,完全端到端学习,超强可扩展性...
- AAAI2021 大运动“视频超分辨”中的对偶子网与多阶通信上采样方案
- 万元大奖,FlyAI算法新赛事,心理卡牌目标检测
- 数据太少怎么办?试试自监督学习,CV训练新利器,fast.ai新教程,LeCun点评
- 3D建模学什么?细分的话,有这么多方向
- 2018 年度人工智能热门事件大盘点:「悲喜交加」
- Nvidia GPU驱动与CUDA、Ubuntu内核兼容性问题的解决日志
- TF使用例子-情感分类
- 数据结构(十七)最小生成树
- Android把数组从大到小排列,Android SparseArray 排序