您的位置:首页 > 编程语言 > Python开发

python学习笔记-函数式编程、迭代器和生成器

2016-06-28 11:53 761 查看
1、函数式编程
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言
函数式编程一般有以下特征:
(1)函数能作为参数传递,或者是作为返回值返回
(2)闭包:如果一个函数定义在另一个函数的作用域中,并且函数中引用了外部函数的局部变量,那么这个函数就是一个闭包。闭包绑定的是外部函数的局部变量,一旦离开外部函数作用域,这些局部变量将无法再从外部访问;另外每次执行至闭包定义时都会构造一个新的闭包,使得旧的闭包绑定的变量不会随第二次调用外部函数而更改。
2、迭代器:lterator
访问集合内元素的一种方法。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。对于无法随机访问的数据结构(比如set)而言,迭代器是唯一访问元素的方式;另外迭代器只有在迭代至某个元素时才计算该元素,这个特点使得它特别适合用于遍历一些巨大的或者是无限的集合,这个特点被称为延迟计算或lazy evaluation(惰性求值)。
#使用迭代器的next方法可以访问下一个元素
#判断迭代器是否还有元素需要访问,使用next方法抛出stoplteration异常则判断此时已经访问到最后一个元素
使用迭代器每次只从对象中读取一条数据,不会造成内存的过大开销。
3、生成器:generator
生成器就是一种迭代器。实现一边循环一边计算的机制,是惰性求值的。
Python’s generators provide a convenient way to implement theiterator protocol.
创建生成器的方法:(1) so easy 把一个列表生成式的[]改成();(2)如果一个函数的定义中有yield关键字,那么这个函数就是一个generator。
简单的讲,包含yield语句的函数就会被解释成生成器,当函数被调用时,遇到yield生成值会自动挂起并暂停他们的执行和状态。
#return返回后这个函数余下的部分就不可能执行了;yield只是挂起状态,遇到next()语句可以恢复generator执行,直到下一个yield表示式处。
贴上网上一篇比较详细的关于python生成器的文章:http://www.tuicool.com/articles/A7vuA36
贴上一篇关于yield详细讲解的文章:http://www.pythontab.com/html/2015/pythonhexinbiancheng_0415/946.html
[/code]
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息