函数式编程(列表生成式生成器迭代器)

Posted 爱学习爱生活的小九

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程(列表生成式生成器迭代器)相关的知识,希望对你有一定的参考价值。

一、列表生成式

a = [1,2,3,4,5,6,7,8]
#每个元素递加1
a = [i+1 for i in a ]#这就是列表生成公式
print(a)
#优点代码简洁

  二、生成器

a1 =(i for i in range(5))#编写生成器,a1 里面记录的是计算公式
print(a1)#打印公式  generator 就是生成器的意思
print(next(a1))#取值
print(next(a1))#每次只能取一个,不能回退不能切片
#输出
<generator object <genexpr> at 0x000001C58902FEB8>
0
1

使用生成器实现 斐波那契数列 (斐波那契数列 ,就是除了前两位,后面所有的数都是前两位的和 例如  1  1  2   3  5   8  )

def func(max):
    n,a,b = 0,0,1 #对应赋值
    while n <max :#判断打印次数
        print(b)#打印值
        a,b = b,a+b#a等于b,b等于 旧a加 b
        n += 1 #计数器
    return done
func(15)
#输出
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610

生成器版本 斐波那契数列

def func(max):
    n,a,b = 0,0,1 #对应赋值
    while n <max :#判断打印次数
        yield b #把函数的执行过程冻结在这一步,并且把b的值返回给外面的next()
        print(b)#打印值
        a,b = b,a+b#a等于b,b等于 旧a加 b
        n += 1 #计数器
    return done

#优点,可以在执行过程中返回值。
f =func(15)
next(f)
next(f)
next(f)
next(f)
#输出
1
1
2

#在python2 里面  range = list  xrange = 生成器

#在python3 里面 range =生成器              没有xrange

 

生成器的创建方式

1、列表生成式 ()  #最多只能用三元运算

2、函数

 

yield vs return 

1、return 返回并终止函数

2、yield 返回数据,并冻结当前的执行过程。。。#如果函数里面出现了yield 该函数就变成了生成器。

3、next 唤醒当前进程执行过程,并向程序发送None 继续执行,到下一个yield冻结。

4、send   唤醒并继续执行程序,发送一个信息到生成器内部。

 

#学习链接 https://blog.csdn.net/hedan2013/article/details/56293173

学习链接 http://www.runoob.com/w3cnote/python-yield-used-analysis.html

 

三、迭代器

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

Python的for循环本质上就是通过不断调用next()函数实现的

for x in [1, 2, 3, 4, 5]:
    pass

#实际上等价于
# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
    try:
        # 获得下一个值:
        x = next(it)
    except StopIteration:
        # 遇到StopIteration就退出循环
        break

 

 

 

以上是关于函数式编程(列表生成式生成器迭代器)的主要内容,如果未能解决你的问题,请参考以下文章

python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

python迭代器,生成器,列表生产式

函数进阶--生成器与迭代器

10.迭代器/生成器/协程函数/列表生成器

python函数--生成器,生成器表达式,列表推导式

python协程函数应用 列表生成式 生成器表达式