可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象。

  列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表

  示例代码:

[ 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基础知识 - 迭代器和生成器初识的更多相关文章

  1. python基础知识---迭代器、生成器、装饰器

    一.迭代器 二.生成器 http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html def func(): #定义生成器,和普通函数的区别是 ...

  2. Python基础之迭代器和生成器

    阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...

  3. python基础8 -----迭代器和生成器

    迭代器和生成器 一.迭代器 1.迭代器协议指的是对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2. ...

  4. 【Python基础】迭代器、生成器

    迭代器和生成器 迭代器 一 .迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单 ...

  5. Python高手之路【九】python基础之迭代器与生成器

    迭代器与生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...

  6. python 基础(五) 迭代器与生成器

    迭代器和生成器 迭代器 iterator (1) 迭代对象: 可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象 可以直接作用于for ...

  7. 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) --------- ...

  8. Python基础4 迭代器,生成器,装饰器,Json和pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  9. Python基础之迭代器、生成器

    一.迭代器: 1.迭代:每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值.例如:循环获取容器中的元素. 2.可迭代对象(iterable): 1)定义:具有__ite ...

随机推荐

  1. Linux同步与相互排斥应用(零):基础概念

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途]         当操作系统进入多道批处理系统时 ...

  2. Java中Socket上的Read操作堵塞问题

    从Socket上读取对端发过来的数据一般有两种方法: 1)依照字节流读取 BufferedInputStream in = new BufferedInputStream(socket.getInpu ...

  3. vue15 自定义元素指令、标签指令

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. ddr sdram self-refresh & auto-refresh

    以下是EDD5116AFTA数据手册的摘录.不过看过了还是不太明白二者的区别. self-refresh:Self-refresh entry [SELF]This command starts se ...

  5. 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 ...

  6. 【VC++学习笔记一】MFC操作Excel

    最近在做一个读取Excel的功能,之前也做过相关的,但总是零零闪闪的,趁着正在劲头上,归纳一下: 利用Automation添加相关的类,在Excel2010中可以在安装文件夹下直接点击Excel.ex ...

  7. oracle基础入门(一)

    一:Oracle的安装     我所知的Oracle的数据库有 10g,11g, 12g, 我们常用的是10g ,因为10g有scott的用户,而11和12现在还没有(哪位大神看到有问题可以指出哦), ...

  8. codeforce 571 B Minimization

    题意:给出一个序列,经过合适的排序后.使得最小. 做法:将a升序排序后,dp[i][j]:选择i个数量为n/k的集合,选择j个数量为n/k+1的集合的最小值. 举个样例, a={1,2,3,4,5,6 ...

  9. 把文件保存到 sdcard

    直接上代码: package com.example.test; import java.io.File; import java.io.FileNotFoundException; import j ...

  10. vmware虚拟机Windows 2003上网问题

    近期须要在Windows 2003 上面做点操作,于是安装虚拟机玩了一下,发现并不能上网,最后的解决的方法是: 卸载IE增强的安全配置 控制面板→加入或删除程序→加入/删除Windows组件" ...