1.17 Python基础知识 - 迭代器和生成器初识
可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象。
列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表
示例代码:
[ i ** 2 for i in range(10) ] #输出结果 [0,1,4,9,16,25,36,49,64,81]
生成器表达式:可以简便快捷地返回一个生成器。生成器表达式的语法和列表解析式基本一样,只不过是将[]替换成()
生成器的数据只有在调用时才生成
示例代码:
a = ( i ** 2 for i in range(10)) print( a ) # 输出结果,打印的是生成器对象地址 <generator object <genexpr> at 0x000001A4118978E0>
调用方法1:
print(next(a)) #相当于 print(a.__next__())
调用方法2:
for i in a:
print(i)
调用方法3:
while True:
try:
print(next(a))
except StopIteration:
break
生成器函数
示例代码:
def fib():
a,b = 0,1
while True:
a,b = b,a+b
yield b print(fib()) for f in fib():
if f < 1000:
print(f)
else:
break # 输出结果 <generator object fib at 0x0000024F66A478E0>
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
迭代和可迭代对象:
1、可迭代对象:Iterable
系列对象都是可迭代对象,生成器函数和生成器表达式也是可迭代对象。
判断是不是可迭代对象通过collections模块中的方法进行测试,示例:
import collections a = ( i ** 2 for i in range(10) ) b = 123 print(isinstance(a,collections.Iterable))
print(isinstance(b,collections.Iterable)) # 输出结果 True
False
2、迭代器:Iterator
可使用内置函数next(),调用迭代器的__next__()方法,依次返回下一个项目值的对象就是迭代器
import collections b = [1,2,3,4] print(isinstance(b,collections.Iterable))
print(isinstance(b,collections.Iterator)) # 输出结果,b是一个可迭代对象,但不是一个迭代器 True
False
像列表,字典,元组都是可迭代对象,但不是迭代器,我们可以用内置函数iter()转换成迭代器,示例代码:
import collections b = [1,2,3,4] print(isinstance(b,collections.Iterable))
print(isinstance(b,collections.Iterator))
print(isinstance(iter(b),collections.Iterator)) # 输出结果 True
False
True
Python内置的可迭代对象
range :range(start,stop[,step])
map :map(function,iterable,...)
itertools.starmap :itertools.starmap(function,iterable)
filter :filter(function,iterable) filterfalse(predicate,iterable)
itertools.filterfalse :
zip :zip(*iterables)
zip_longest :zip_longest(*iterables,fillvalue=None)
enumerate :enumerate(iterable,start=0)
待续。。。
1.17 Python基础知识 - 迭代器和生成器初识的更多相关文章
- python基础知识---迭代器、生成器、装饰器
一.迭代器 二.生成器 http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html def func(): #定义生成器,和普通函数的区别是 ...
- Python基础之迭代器和生成器
阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...
- python基础8 -----迭代器和生成器
迭代器和生成器 一.迭代器 1.迭代器协议指的是对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2. ...
- 【Python基础】迭代器、生成器
迭代器和生成器 迭代器 一 .迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单 ...
- Python高手之路【九】python基础之迭代器与生成器
迭代器与生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...
- python 基础(五) 迭代器与生成器
迭代器和生成器 迭代器 iterator (1) 迭代对象: 可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象 可以直接作用于for ...
- python基础之迭代器、生成器、装饰器
一.列表生成式 a = [0,1,2,3,4,5,6,7,8,9] b = [] for i in a: b.append(i+1) print(b) a = b print(a) --------- ...
- Python基础4 迭代器,生成器,装饰器,Json和pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- Python基础之迭代器、生成器
一.迭代器: 1.迭代:每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值.例如:循环获取容器中的元素. 2.可迭代对象(iterable): 1)定义:具有__ite ...
随机推荐
- Linux同步与相互排斥应用(零):基础概念
[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途] 当操作系统进入多道批处理系统时 ...
- Java中Socket上的Read操作堵塞问题
从Socket上读取对端发过来的数据一般有两种方法: 1)依照字节流读取 BufferedInputStream in = new BufferedInputStream(socket.getInpu ...
- vue15 自定义元素指令、标签指令
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ddr sdram self-refresh & auto-refresh
以下是EDD5116AFTA数据手册的摘录.不过看过了还是不太明白二者的区别. self-refresh:Self-refresh entry [SELF]This command starts se ...
- mysql InnoDB加锁分析
文章转载自:http://www.fanyilun.me/2017/04/20/MySQL%E5%8A%A0%E9%94%81%E5%88%86%E6%9E%90/ 以下实验数据基于MySQL 5.7 ...
- 【VC++学习笔记一】MFC操作Excel
最近在做一个读取Excel的功能,之前也做过相关的,但总是零零闪闪的,趁着正在劲头上,归纳一下: 利用Automation添加相关的类,在Excel2010中可以在安装文件夹下直接点击Excel.ex ...
- oracle基础入门(一)
一:Oracle的安装 我所知的Oracle的数据库有 10g,11g, 12g, 我们常用的是10g ,因为10g有scott的用户,而11和12现在还没有(哪位大神看到有问题可以指出哦), ...
- codeforce 571 B Minimization
题意:给出一个序列,经过合适的排序后.使得最小. 做法:将a升序排序后,dp[i][j]:选择i个数量为n/k的集合,选择j个数量为n/k+1的集合的最小值. 举个样例, a={1,2,3,4,5,6 ...
- 把文件保存到 sdcard
直接上代码: package com.example.test; import java.io.File; import java.io.FileNotFoundException; import j ...
- vmware虚拟机Windows 2003上网问题
近期须要在Windows 2003 上面做点操作,于是安装虚拟机玩了一下,发现并不能上网,最后的解决的方法是: 卸载IE增强的安全配置 控制面板→加入或删除程序→加入/删除Windows组件" ...