可迭代

  内置方法中含有__iter__的数据类型都是可迭代的,只要是可迭代的就可以使用for循环,反之亦然。

print(dir(''))   # dir()函数可以获取当前数据类型的所有内置方法  返回值是list
print('__iter__' in dir([])) # 判断是否含有__iter__内置方法

  迭代器

  内置方法中含有__iter__和__next__的都是迭代器,所以迭代器一定是可迭代的

# 一个可迭代的对象调用__iter__()之后会返回一个迭代器
print(type([].__iter__())) # <class 'list_iterator'>

  迭代器可以使用__next__()方法一个一个去获取值

li = [1, 2, 3, 4, 5]
iterator = li.__iter__()
print(iterator.__next__()) #
print(iterator.__next__()) #
print(iterator.__next__()) #

  迭代器的好处:

    从容器内一一取值,可以取出全部内容

    节省内存空间:每次取值时才在内存中生成一个值

  迭代器和可迭代判断方法

from collections import Iterator
from collections import Iterable
print(isinstance([], Iterator)) # Iterator 迭代器
print(isinstance([], Iterable)) # Iterable 可迭代

  生成器

  生成器是含有yield关键字的迭代器。

# 定义
"""
def generator():
函数体
yield 返回值
"""

  调用生成器后返回的是一个生成器。

def generator():
print('生成器')
yield 'zxc'
return 'a'
# 生成器中yield和return能同时存在,return在yield后面定义没有任何意义,
# return在yield前面定义将无法执行yield,也就不在是生成器了
ret = generator()
print(type(ret)) # <class 'generator'>

python基础十一之迭代器和生成器的更多相关文章

  1. python基础篇_005_迭代器和生成器

    Python迭代器和生成器 1.迭代器 迭代:可以将某个数据集内的数据“一个挨着一个的取出来” for i in range(1, 10, 2): # in 后面的对象必须是一个可迭代的 print( ...

  2. 【笔记】Python基础四:迭代器和生成器

    一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...

  3. python基础知识7——迭代器,生成器,装饰器

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

  4. Python基础入门(迭代器和生成器)

    1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 ...

  5. python基础9 (迭代器、生成器)

    1.可迭代对象 迭代:将某个数据集内的数据“一个挨着一个的取出来” 可迭代协议:可以被迭代要满足的要求,即内部含有__iter__()方法 可迭代的类型:字符串.列表.元组.字典.集合特点:惰性运算 ...

  6. python 基础篇 13 迭代器与生成器

    13. 前⽅⾼能-迭代器和⽣成器本节主要内容:1. 迭代器2. ⽣成器 ⼀. 迭代器我们之前⼀直在⽤可迭代对象进⾏迭代操作. 那么到底什么是可迭代对象. 本⼩节主要讨论可迭代对象. ⾸先我们先回顾⼀下 ...

  7. python基础——9(迭代器、生成器)

    一.迭代器 1.概念 器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 s = 'abcdef' ls = [1,2,3,4,5] 遍 ...

  8. Python基础——函数的迭代器和生成器

    等待更新…………………… 后面再写

  9. 完全理解 Python 迭代对象、迭代器、生成器

    完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun    本文源自RQ作者 ...

随机推荐

  1. 【难为听】weex-ui

    eslint 不喜欢,但是确实规范了代码,同古代统一货币一样,有无穷的意义.故喜欢 weex-ui在项目中的使用方法 npm install -g weex-toolkit@latest weex c ...

  2. 如何使用Data Lake Analytics创建分区表

    前言 Data Lake Analytics(后文简称DLA)提供了无服务化的大数据分析服务,帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在关系型数据库 ...

  3. class介绍

    ES6引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对 ...

  4. 为什么学习React Native三点原因

    React Native不到两岁,兼容Android平台刚刚1年.我学习React Native其实也就不到1年,不算长,也不算短. Paul Graham在文章中写过:大多数人真正注意到你的时候,不 ...

  5. 【JZOJ3853】【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)

    EVRT Bsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3:30,32,32,3 ...

  6. Android中View的layout mechanism(布局机制)

    layout mechanism Android中View的layout mechanism主要分为两个阶段:measure阶段和layout阶段.layout mechanism按照一定的顺序进行, ...

  7. Objectarx之分批存储相连实体

    void CCommonFuntion::BatchStorageEnt(AcDbObjectIdArray& inputId, std::vector<std::vector<A ...

  8. compass与css sprite(雪碧图)

    什么是css sprite? css sprite,中文叫雪碧图,也有人喊CSS精灵,就是一种背景拼合的技术,然后通过background-position来显示雪碧图中需要显示的图像. MDN相关链 ...

  9. PHP进阶与redis锁限制并发访问功能示例

    <?php /** * Redis锁操作类 * Date: 2017-06-30 * Author: fdipzone * Ver: 1.0 * * Func: * public lock 获取 ...

  10. 解决eclipse不会自动弹出Console控制台的问题

    有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行, 解决方案: windows  ->   preferences   ->  run/debug   ...