我一直认为Python是一门很神奇的语言。神奇之处在于其既可阳春白雪,亦可下里巴人。也就是其简单到几乎所有的人稍加学习即可上手,但是你如果细细品味,就会发现他还有很多高深的东西。正如一位漂亮的姑娘,一眼看上去就会喜欢上。交往深入,你会发现她精通琴棋书画而且非常有内涵,我相信你这时肯定会深深的迷恋上她。
所谓函数式编程最直接的解释就是利用函数式思维来进行思考问题。那么什么是函数式思维呢?在Python中,有以下几种函数式编程相关的话题:
lambda_add = lambda x, y: x + y
这与使用def定义的求和函数完全一样,可以使用lambda_add作为函数名进行调用。然而,提供lambda的目的是为了编写偶尔为之的、简单的、可预见不会被修改的匿名函数。
>>> #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
>>>
定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。其实最准确的说法应该是闭包是由函数和与其相关的引用环境组合而成的实体。来看下面的例子。
>>> a = 0
>>> def get_a():
… return a
…
>>> get_a()
0
>>> a = 3
>>> get_a()
3
例子中,a为一个global变量,a和get_a()组成了一个闭包,所以a改变时也会直接反应到get_a()函数中。
作用:闭包的作用不言而喻,加强模块化,增强抽象等等。而且在闭包的基础上才实现了装饰器。
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()
诸如map, reduce, filter, zip 之类的,但是我觉得这些都可以利用列表解析来完成,而且还更加优雅。
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中的一般表达式、控制结构、异常机制、类机制、多线程机制、模块的动态加载机制、内存管理机制等核心技术的运行原理,