我一直认为Python是一门很神奇的语言。神奇之处在于其既可阳春白雪,亦可下里巴人。也就是其简单到几乎所有的人稍加学习即可上手,但是你如果细细品味,就会发现他还有很多高深的东西。正如一位漂亮的姑娘,一眼看上去就会喜欢上。交往深入,你会发现她精通琴棋书画而且非常有内涵,我相信你这时肯定会深深的迷恋上她。
函数式编程:
所谓函数式编程最直接的解释就是利用函数式思维来进行思考问题。那么什么是函数式思维呢?在Python中,有以下几种函数式编程相关的话题:
1. 定义匿名函数。
使用lambda可以定义简单的单行匿名函数。如:lambda_add = lambda x, y: x + y
这与使用def定义的求和函数完全一样,可以使用lambda_add作为函数名进行调用。然而,提供lambda的目的是为了编写偶尔为之的、简单的、可预见不会被修改的匿名函数。
2. 将函数作为参数。
在Python中可将函数作为参数传递。其原因就在于函数也是对象。实际上,在 Python 中函数是一级对象。你可以像其他对象一样使用而没有什么特别的限制。关于函数就是对象的一个最常见的例子就是 C 中的函数指针;将函数传递到其他的将要使用它的函数。>>> #A very simple function
>>> def greeter():
… print("Hello")
…
>>> #An implementation of a repeat function
>>> def repeat(fn, times):
… for i in range(times):
… fn()
…
>>> repeat(greeter, 3)
Hello
Hello
Hello
>>>
3. 闭包
定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。其实最准确的说法应该是闭包是由函数和与其相关的引用环境组合而成的实体。来看下面的例子。
>>> a = 0
>>> def get_a():
… return a
…
>>> get_a()
0
>>> a = 3
>>> get_a()
3
例子中,a为一个global变量,a和get_a()组成了一个闭包,所以a改变时也会直接反应到get_a()函数中。
作用:闭包的作用不言而喻,加强模块化,增强抽象等等。而且在闭包的基础上才实现了装饰器。
4. 装饰器
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。比如你想在在调用某个函数时都想计算其执行时间,那么就可以使用装饰器来进行,比如下面的代码
import time
def timeit(func):
def wrapper():
start = time.clock()
func()
end =time.clock()
print 'used:', end - start
return wrapper
@timeit
def foo():
print 'in foo()'
foo()
5. 内建函数:
诸如map, reduce, filter, zip 之类的,但是我觉得这些都可以利用列表解析来完成,而且还更加优雅。
Further Reading and Reference
函数式编程
1. http://docs.python.org/howto/functional.htmlPython官方文档,讲解了函数式编程的一些要点、原理、机制
2. http://www.cnblogs.com/huxi/archive/2011/06/24/2089358.html作者尝试引导大家如何用Python使用函数式的思维进行思考
闭包
1. http://linluxiang.iteye.com/blog/789946 Python闭包研究,作者从汇编代码的角度为大家讲解有关闭包的特性及原理
2. http://www.ibm.com/developerworks/cn/linux/l-cn-closure/分析了动态语言(Python、Ruby 和 Lua)中的闭包的概念、形式与应用
装饰器
1. http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html这里讲解了有关装饰器和面向方面(aspect-oriented)编程的一些要点。
其他
1. http://hyperpolyglot.org/scripting作者使用众多角度(可谓非常多)对解释性语言(PHP, Perl, Python, Ruby)进行了全面的比较,非常赞!
2. http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/a-guide-to-pythons-magic-methods.html有没有听说过Python魔术方法?这篇文章肯定会让你大开眼界,深入了解Python更神奇的东西
书籍:
《Python源码剖析》这本书在C代码一级,深入细致地剖析了Python的实现。书中不仅包括了对大量Python内置对象的剖析,更将大量的篇幅用于对Python虚拟机及Python高级特性的剖析。读完这本书,相信你能够理解Python中的一般表达式、控制结构、异常机制、类机制、多线程机制、模块的动态加载机制、内存管理机制等核心技术的运行原理,