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 ...
随机推荐
- gpdb删除segment上残余的session和sql
转载请注明出处:gpdb删除segment上残余的session和sql 最近公司的gpdb的变卡,导致线上系统查询队列阻塞,用户一点数据都查不出来. 每天早上我和同事都得用我们自家做的gpdb运维平 ...
- Nutch1.6学习笔记
回 到 目 录 暑假每天傍晚或晚上更新 伪恋赛高 这里提供nutch1.6的src下载: apache-nutch-1.6-src.zip 115网盘礼包码:5lbcymlo6u76http://11 ...
- Objective-C中的同步线程的锁
概述 在多线程编程中往往会遇到多个线程同时访问共享的资源,这种情况我们需要通过同步线程来避免.也就是给线程加锁. 因为Objective-C是C语言的超集.,严格的来说是真超集.所以C语言当中的pth ...
- back_inserter 与 iterator
查看这里: http://www.cplusplus.com/reference/iterator/back_inserter/ 是用来在最后插入的 注意,这个函数,是隐式特化了.
- 【Facebook的UI开发框架React入门之九】button简单介绍(iOS平台)-goodmao
--------------------------------------------------------------------------------------------------- ...
- cocos2d-x 2.2.0 怎样在lua中注冊回调函数给C++
cocos2d-x内部使用tolua进行lua绑定.可是引擎并没有提供一个通用的接口让我们能够把一个lua函数注冊给C++层面的回调事件. 翻看引擎的lua绑定代码,我们能够仿照引擎中的方法来做. 值 ...
- ADO.NET数据读取封装
public class sqlserver { //private string sqlstr = System.ConfigurationManager.ConnectionStrings[&qu ...
- selenium+python 安装使用
一.序言 selenium官网selenium简单教程selenium完整教程python基础教程 二.安装python3 https://www.python.org/downloads/relea ...
- 开启mysql远程服务
1.在开始里输入远程,选择允许从这台机器访问 2.选择第二个开启 3. 打开cmd, 进入mysql中更改mysql数据库下的user表,中的root用户的Host 为 ‘%’use mysql:up ...
- i2c tools 使用
1.查询罗列出I2C的控制器总线数目 # i2cdetect -l i2c-0 i2c OMAP I2C adapter I2C adapter i2c-1 i2c OMAP I2C adapter ...