生成器和迭代器的功能介绍

1. 生成器(generator)

1. 赋值生成器

1. 创建

方法:x = (variable for variable in iterable)
例如:x = (i for i in range(10))
print(x)
>>> <generator object <genexpr> at 0x00000000006B85C8>
返回值:generator
#使用元祖推导式的时候回变成一个生成器。

2. 调用

方法:x.__next__()
返回值:object
#对应生成器一般使用该种方法调用,当然也可以通过for循环进行遍历。

2. 函数生成器

函数生成器也是常用的或者常说的生成器,顾名思义就是通过函数来创建的,不过在函数中一定需要使用yield关键字声明。

1. yield作为返回值

斐波那契数列:

  1. 常规函数实现

    例如:def fei(max_n):
    n,a,b = 0,0,1
    while n < max_n:
    print(b)
    a,b = b,a+b
    n += 1
    return 'game over'
    #通过一个函数实现斐波那契数列。直接通过fei(num)调用即可打印出结果。
  2. 生成器实现

    例如:def fei(max_n):
    n,a,b = 0,0,1
    while n < max_n:
    yield b
    a,b = b,a+b
    n += 1
    return 'game over'
    #通过一个生成器斐波那契数列。次数函数执行的结果则为一个生成器,因此调用时需要对函数的执行结果赋值给变量,然后通过__next__()方法进行调用。

2. yield作为接收值

单线程异步并行

例如:import time
def consumer(name):
print('%s来吃包子了!'%name)
while True:
bao = yield
print('包子%s被%s吃了!'%(bao,name))
def producer():
zhang = consumer('zhangsan')
li = consumer('lisi')
zhang.__next__()
li.__next__()
print('包子已经在锅里了!')
for i in range(1,6,2):
j = i+1
time.sleep(1)
print('包子%s好了!'%i)
print('包子%s好了!'%j)
zhang.send(i)
li.send(j)
producer()
#把yield作为接收值,使用send方法把数据传递给yield来执行生成器。

2. 迭代器(iterator)

可以通过for循环的对象为可迭代对象,对于数据类型str、list、tuple、dict、set、generator都是可迭代对象,即iterable,其中generator可以使用next()方法进行调用的可迭代对象。对应迭代器的定义为:可以使用next()方法进行调用的可迭代对象即为迭代器。所以生成器就是迭代器的一种。对应上述其他数据类型则只是一个可迭代对象,而不是迭代器,但可以通过iter()方法可以将上述其他数据类型转换为一个迭代器。

Python中生成器和迭代器的功能介绍的更多相关文章

  1. python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

    python中"生成器"."迭代器"."闭包"."装饰器"的深入理解 一.生成器 1.生成器定义:在python中,一边 ...

  2. Python中模块之os的功能介绍

    Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>> <module ...

  3. Python中生成器和迭代器的区别(代码在Python3.5下测试):

    https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...

  4. python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

    一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延 ...

  5. Python中模块之re的功能介绍

    re模块的功能介绍 1. 方法 match 从开头开始查找 方法:re.match(pattern,string,flags=0) 返回值:<class '_sre.SRE_Match'> ...

  6. Python中模块之sys的功能介绍

    sys模块的功能介绍 1. sys的变量 argv 命令行参数 方法:sys.argv 返回值:list 例如:test1.py文件中有两句语句1.import sys 2.print(sys.arg ...

  7. Python中模块之copy的功能介绍

    模块之copy的功能介绍 copy主要分两种: 1.浅拷贝 2.深拷贝 赋值: 在python中赋值算特殊的拷贝,其实赋值可以理解为同一个对象有两个名字,所以当其中一个发生变化,另一个也跟着会变化. ...

  8. Python中模块之queue的功能介绍

    模块之queue的功能介绍 队列的分类: 队列主要要分为两种 1.双向队列 2.单项队列 1. 单项队列 创建单项队列 格式:queue.Queue(obj) 例如:que = queue.Queue ...

  9. Python中def及lambda的功能介绍

    函数def及lambda的功能介绍 1. def函数的功能介绍 1. 函数的参数 无参数函数 格式:def func_name(): '''__doc__'''#函数的说明文档(内容) express ...

随机推荐

  1. R语言基础1

    ----------------------------------R语言学习与科研应用,科研作图,数据统计挖掘分析,群:719954246-------------------------- 我们将 ...

  2. linux系统增加开机启动服务/应用

    操作 在/etc/init.d下新建示例脚本文件(customize.sh),该脚本会启动zookeeper服务.内容如下: #!/bin/sh /usr/local/zookeeper-/bin/z ...

  3. java之servlet小记

    Servlet               service+applet                   服务+小程序 Java是语言,像c\c#等一样,是一门计算机语言,servlet是java ...

  4. python3+beautifulSoup4.6抓取某网站小说(四)多线程抓取

    上一篇多文章,是二级目录,根目录"小说",二级目录"作品名称",之后就是小说文件. 本篇改造了部分代码,将目录设置为根目录->作者目录->作品目录- ...

  5. HTTP协议扫盲(一)HTTP协议的基本概念和通讯原理

    一.HTTP协议的概念 1.引子  - 从url开始 URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下 schema://host[:port# ...

  6. 数据结构与算法 —— 链表linked list(03)

    继续关于linked list的算法题: 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素使得每个元素只留下一个. 案例: 给定 1->1->2,返回 1->2 给定  ...

  7. Hadoop API:遍历文件分区目录,并根据目录下的数据进行并行提交spark任务

    hadoop api提供了一些遍历文件的api,通过该api可以实现遍历文件目录: import java.io.FileNotFoundException; import java.io.IOExc ...

  8. WPF经纬度控件

    1.需求及思路 绘制一个控件,可以设置经纬度,经纬度用double类型表示,支持绑定数据,数据更改通知.错误验证,输入检校. 大致设计界面如下图: 2.主要代码 主要代码在于计算,double类型转换 ...

  9. 判断字符串的后缀.endswith()

    可以用str.endswith('.jpg')来判断字符串是否以jpg结尾,返回True或者False

  10. matlab coder 工具箱使用教程

    之前一直听说matlab代码可以转C和C++代码,但是一直都没有时间尝试,最近闲着无聊,就想来试试如何转换,上网查了很多资料,照着做下去,发现都有一些问题,之后自己琢磨了很久,终于将一个很简单的例子给 ...