包含python闭包函数优势的词条( 五 )


匿名内部
在Python中的闭包(Closure)
学过Java GUI编程的人都知道定义匿名内部类是注册监听等处理的简洁有效手段,闭包的定义方式有点类似于这种匿名内部类,
但是闭包的作用威力远远超过匿名内部类,这也是很多流行动态语言选择闭包的原因 , 相信你在JavaScript中已经了解它的神奇功效了 。
定义
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure) 。
简单闭包的例子:
下面是一个使用闭包简单的例子,模拟一个计数器,通过将整型包裹为一个列表的单一元素来模拟使看起来更易变:
函数counter()所作的唯一一件事就是接受一个初始化的值来计数,并将该值赋给列表count成员 , 然后定义一个内部函数incr() 。通过内部函数使用变量count,就创建了一个闭包 。最魔法的地方是counter()函数返回一个incr(),一个可以调用的函数对象 。
运行:
c = counter⑸
type(c)
type 'function'
print c()6
print c()
7
代码格式较重要
c2 = counter(99)
100
print c()
8
Python有哪些技术上的优点?比其他语言好在哪儿?Python有哪些技术上的优点
1. 面向对象和函数式
从根本上讲,Python是一种面向对象的语言 。它的类模型支持多态、运算符重载和多重继承等高级概念 , 并且以Python特有的简洁的语法和类型为背景,OOP十分易于使用 。事实上,即使你不懂这些术语,仍会发现学习Python比学习其他OOP语言要容易得多 。
除了作为一种强大的代码组织和重用手段以外 , Python的OOP本质使它成为其他面向对象系统语言的理想脚本工具 。例如,通过适当的粘接代码,Python程序可以对C++、Java和C#的类进行子类的定制 。
OOP只是Python的一个选择而已 , 这一点非常重要 。即使不能立马成为一个面向对象高手,但你同样可以继续深入学习 。就像C++一样,Python既支持面向对象编程也支持面向过程编程的模式 。如果条件允许,其面向对象的工具可以立即派上用场 。这对策略开发模式十分有用,该模式常用于软件开发的设计阶段 。
除了最初的过程式(语句为基?。┖兔嫦蚨韵螅ɡ辔 。┑谋喑谭妒? ,Python在最近几年内置了对函数式编程的支持——一个多数情况下包括生成器、推导、闭包、映射、装饰器、匿名lambda函数和第一类函数对象的集合 。这是对其本身OOP工具的补充和替代 。
2. 免费
Python的使用和分发是完全免费的 。就像其他的开源软件一样,例如 , Tcl、Perl、Linux和Apache 。你可以从Internet上免费获得Python的源代码 。你可以不受限制地复制Python , 或将其嵌入你的系统或者随产品一起发布 。实际上,如果你愿意的话 , 甚至可以销售它的源代码 。
但请别误会:“免费”并不代表“没有支持” 。恰恰相反,Python的在线社区对用户需求的响应和商业软件一样快 。而且,由于Python完全开放源代码,提高了开发者的实力,并产生了一个很大的专家团队 。
尽管研究或改变一种程序语言的实现并不是对每一个人来说都那么有趣 , 但是当你知道如果需要的话可以做到这些,该是多么的令人欣慰 。你不需要去依赖商业厂商的智慧,因为最终的文档和终极的净土(源码)任凭你的使用 。
Python的开发是由社区驱动的,是Internet大范围的协同合作努力的结果 。Python语言的改变必须遵循一套规范而有约束力的程序(称作PEP流程),并需要经过规范的测试系统进行彻底检查 。正是这样才使得Python相对于其他语言和系统可以保守地持续改进 。

推荐阅读