Python中生成器和迭代器的功能介绍
生成器和迭代器的功能介绍
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作为返回值
斐波那契数列:
常规函数实现
例如: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)调用即可打印出结果。
生成器实现
例如: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中生成器和迭代器的功能介绍的更多相关文章
- python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解
python中"生成器"."迭代器"."闭包"."装饰器"的深入理解 一.生成器 1.生成器定义:在python中,一边 ...
- Python中模块之os的功能介绍
Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>> <module ...
- Python中生成器和迭代器的区别(代码在Python3.5下测试):
https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...
- python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解
一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延 ...
- Python中模块之re的功能介绍
re模块的功能介绍 1. 方法 match 从开头开始查找 方法:re.match(pattern,string,flags=0) 返回值:<class '_sre.SRE_Match'> ...
- Python中模块之sys的功能介绍
sys模块的功能介绍 1. sys的变量 argv 命令行参数 方法:sys.argv 返回值:list 例如:test1.py文件中有两句语句1.import sys 2.print(sys.arg ...
- Python中模块之copy的功能介绍
模块之copy的功能介绍 copy主要分两种: 1.浅拷贝 2.深拷贝 赋值: 在python中赋值算特殊的拷贝,其实赋值可以理解为同一个对象有两个名字,所以当其中一个发生变化,另一个也跟着会变化. ...
- Python中模块之queue的功能介绍
模块之queue的功能介绍 队列的分类: 队列主要要分为两种 1.双向队列 2.单项队列 1. 单项队列 创建单项队列 格式:queue.Queue(obj) 例如:que = queue.Queue ...
- Python中def及lambda的功能介绍
函数def及lambda的功能介绍 1. def函数的功能介绍 1. 函数的参数 无参数函数 格式:def func_name(): '''__doc__'''#函数的说明文档(内容) express ...
随机推荐
- php函数var_dump() 、print_r()、echo()
var_dump() 能打印出类型 print_r() 只能打出值 echo() 是正常输出... 需要精确调试的时候用 var_dump(); 一般查看的时候用 print_r() 另外 , ech ...
- machine learning 之 导论 一元线性回归
整理自Andrew Ng 的 machine learnig 课程 week1. 目录: 什么是机器学习 监督学习 非监督学习 一元线性回归 模型表示 损失函数 梯度下降算法 1.什么是机器学习 Ar ...
- SpringCloud的部署模型
http://www.th7.cn/Program/java/201608/919853.shtml
- python 模拟浏览器登陆coursera
import requests import random import string def randomString(length): return ''.join(random.choice(s ...
- MFC基础
入门博客:http://www.cnblogs.com/qinfengxiaoyue/category/451679.html 消息机制:http://www.cnblogs.com/qinfengx ...
- javasciprt性能优化
本文主要是在我读<高性能Javascript>之后,想要记录下一些有用的优化方案,并且就我本身的一些经验,来大家一起分享下, Javascript的加载与执行 大家都知道,浏览器在解析DO ...
- flash上传文件,如何解决跨域问题
今天同事遇到一个问题,我们有两个应用,一个后台应用,主要用于运营人员编辑文章,发布到官网:一个图片服务器应用,其他很多的应用上传的图片也会存放在这,还对外提供一些查询和管理api. 前者部署在back ...
- Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce
文章内容使用django-ckeditor 1)安装django-ckeditor pip install django-ckeditorpip install Pillow 2)在settings. ...
- POJ-1258 Agri-Net---MST裸题Prim
题目链接: https://vjudge.net/problem/POJ-1258 题目大意: 求MST 思路: 由于给的是邻接矩阵,直接prim算法 #include<iostream> ...
- jquery中的attr()与prop()的区别
根据官方的建议:具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()