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

一、列表生成式

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

原文地址:https://www.cnblogs.com/mjiu/p/8654724.html

时间: 2024-10-23 16:43:31

函数式编程(列表生成式、生成器、迭代器)的相关文章

python列表生成式&amp;生成器&amp;迭代器

一.列表生成式 什么是列表生成式? 列表生成式是快速生成列表的一种方式.(貌似有些废话) 更专业点的说法:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 在python2.7里 举个例子,要生成list [1,2,3,4,5],可以用range(1,6) >>> range(1,6) [1, 2, 3, 4, 5] 但是如果要生成[1x1,2x2,3x3,4x4,5x5]怎么做呢? 普通青年做法: >>&

python-基础 生成式 生成器 迭代器 JSON pickl

目录 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 列表生成式,是Python内置的一种极其强大的生成list的表达式. 现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现? 1 >>> a 2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3 >>> b =

s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法

python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf-8_*_ 或者将字符串单独声明: a = "中文".encode("utf-8") 函数式编程 函数式编程中的函数指代的是数学中的函数. 函数式编程输入如果确定,则输出一定是确定的.函数中并没有很多逻辑运算 python是一个面向对象的语言,只是一部分支持函数式编程.

列表生成式,迭代器&amp;生成器

一.列表生成式 用例--使列表数值都加上1 1 li = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 li_tmp = [i+1 for i in li] 3 li = li_tmp 4 print("new list:"+str(li)) #[1, 2, 3, 4, 5, 6, 7, 8, 9,10] li_dic =  [{1:3+i,2:4+i} for i in range(5)] #[{1: 3, 2: 4}, {1: 4, 2: 5}, {1: 5,

17. Python 生成式 &nbsp; 生成器 &nbsp; 迭代器

1.      生成式和生成器 列表生成式是python受欢迎的一种语法之一,通过一句简洁的语法,就能对元组元素进行过滤,还可以对得到的元素进行转换处理. 语法格式: [exp for val in collection if condition] 相当于 result = [] for val in collection: if (condition): result.append(exp) 例子: a = [x*x for x in xrange(10) if x%2 == 0] print

列表生成式,生成器

一.列表生成式 二.生成器 斐波那契数列可以用生成器来实现. 参见:廖雪峰的生成器的教程 原文地址:https://www.cnblogs.com/zhizihuakai66/p/8877315.html

列表生成式&amp;生成器表达式

一.列表生成式 def func(): return [lambda x:i*x for i in range(4)] print([j(2) for j in func()]) 结果:[6,6,6,6] 二.生成器表达式 def func(): return (lambda x:i*x for i in range(4)) print([j(2) for j in func()]) 结果:[0,2,4,6] 原文地址:https://www.cnblogs.com/gpd-Amos/p/899

5.1.24 Python之列表生成式、生成器、可迭代对象与迭代器

语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法糖的概念 "语法糖",从字面上看应该是一种语法."糖",可以理解为简单.简洁.其实我们也已经意识到,没有这些被称为"语法糖"的语法,我们也能实现相应的功能,而 "语法糖"使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这

全本 | iKcamp翻译 | 《JavaScript 轻量级函数式编程》|《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson - <You-Dont-Know-JS>作者 译者团队(排名不分先后):阿希.blueken.brucecham.cfanlife.dail.kyoko-df.l3ve.lilins.LittlePineapple.MatildaJin.冬青.pobusama.Cherry.萝卜.vavd317.vivaxy.萌萌.zhouyao 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱: