iter 迭代
iterable 可迭代的
iterator迭代器
dir函数查看一个数据类型内部含有哪些方法
两边带着双下划线的方法叫做"魔术方法","双下方法","内置方法"
这些方法都有一个特点:你可以调但是不需要你直接调用
可迭代协议 只要是含有'__iter__'方法的数据类型都是可迭代的
是python规定的 : 可迭代类型 和 python语言之间的协议 检测某个变量/值 是不是可迭代的呢?
法一
print('__iter__' in dir([]))
print('__iter__' in dir(123))
法二
from collections import Iterable
print(isinstance([],Iterable)) # 内置函数,判断一个具体的值是不是某个数据类型的
print(isinstance(123,Iterable)) # 内置函数,判断一个具体的值是不是某个数据类型的 可以迭代的都可以使用for循环
for循环一个列表的时候必须用的
__next__取下一个值 迭代器协议 : 含有__next__和__iter__方法的变量/值都是迭代器
迭代器的特点:
具有next和iter方法
通过一个next多次执行就可以获得所有这个容器中的值
迭代器中的值只能取一次
不取的时候值不出现 for循环取值
for循环内部的机制就是迭代器取值的机制
在for循环执行的过程中 : 先把可迭代的变成一个迭代器,然后再从中一个一个的取值 range生成的就是一个迭代器,创建这个迭代器并不会真的把迭代器中的所有数据一次性生成
什么时候生成呢? 只有通过next取值的时候才会生成
记住你要多少个值 ,当前该给你什么,并且记住我下一个该给你什么,下一个和当前这个数的关系
迭代器的作用就是节省内存,for循环就是利用了迭代器节省内存的特点来对python当中的变量来进行操作的
本质上for循环替我们做了上面程序的一系列操作:
生成迭代器
循环每一次对这个迭代器执行next
并且到迭代器的最后就停止 判断一个变量/值是否是迭代器的方法
lst_iterator = [].__iter__()
print('__iter__' in dir(lst_iterator))
print('__next__' in dir(lst_iterator))
print('__iter__' in dir(lst_iterator) and '__next__' in dir(lst_iterator)) f是一个迭代器还是一个可迭代的
range是一个迭代器还是一个可迭代的
f = open('file')
print('__iter__' in dir(f) and '__next__' in dir(f)) a = range(10)
print('__iter__' in dir(a))
print('__iter__' in dir(a) and '__next__' in dir(a)) 第二种方法
from collections import Iterator
f = open('file')
print(isinstance(f,Iterator))
print(isinstance(range(10),Iterator))
a = range(10)
for i in a:
print(i)
for i in a:
print(i)


  

迭代器 生成器 yield的更多相关文章

  1. Python入门之迭代器/生成器/yield的表达方式/面向过程编程

    本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...

  2. day4 内置函数 迭代器&生成器 yield总结 三元运算 闭包

    内置函数: 内置函数 # abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. b = -100 print(b) print(abs(b)) # all() 所有为真才为真,只要有一 ...

  3. Two---python循环语句/迭代器生成器/yield与return/自定义函数与匿名函数/参数传递

    python基础02 条件控制 python条件语句是通过一条或多条语句的执行结果(Ture或者False)来执行的代码块 python中用elif代替了else if,所以if语句的关键字为:if- ...

  4. 迭代器&生成器&yield异步

    迭代器 #迭代器是访问集合元素的一种形式,迭代器从集合的第一个元素开始访问,直到所有的元素被访问# 结束才结束,迭代器只能往前访问,不能往后访问,比如你先访问1,在访问2,在访问3.如果已经# 访问到 ...

  5. 理解迭代器,生成器,yield,可迭代对象

    原文:https://foofish.net/iterators-vs-generators.html 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Gen ...

  6. 迭代器,生成器,yield,yield from理解

    迭代器 说到迭代器就得想说可迭代对象Iterable,实现了__iter__()方法的对象都是可迭代对象,例如很多容器,list ,set, tuples.使用iter方法可以把一个可迭代对象变成迭代 ...

  7. Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

    本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...

  8. Python 迭代器&生成器

    1.内置参数     Built-in Functions     abs() dict() help() min() setattr() all() dir() hex() next() slice ...

  9. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

随机推荐

  1. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  2. 协程.md

    一. # 可迭代l = [ i for i in range(10) ] # l是可迭代的,但不是迭代器for idx in l:    print(idx)    # range是个迭代器for i ...

  3. EOS 开发终极神器-vscode (你绝对找不到的干货)

    https://eosfans.io/topics/323 前言:最近一直苦于EOS开发没有好用的IDE,用了很多,试了很多,都让人觉得有些差强人意.于是乎笔者在经过,长时间的查找实践中,终于找到了e ...

  4. Spark创建空的DataFrame

    前言 本文主要给出Spark创建空的DataFrame的代码示例,这里讲的空的DataFrame主要指有列名(可以自己随意指定),但是没有行的DataFrame,因为自己在开发过程中有这个需求,之前并 ...

  5. python 内置方法join 给字符串加分隔符

    #!/usr/bin/python3 # -*- coding: utf-8 -*- test = "今天吃了吗" test = "_".join(test) ...

  6. 阿里云RDS备份在本地mysql快速还原

    本地准备: ##安装和RDS相同的mysql版本,拿mysql5.6为例 http://www.cnblogs.com/37yan/p/7513605.html ##安装Xtrabackup 包 cd ...

  7. 动态添加class的一种方法

    外面可以写一层class再用:class 绑定新的clss进去  而且可以用三目运算.爽歪歪

  8. CentOS6.5 安装Storm集群

    1.首先安装依赖包 [root@Hadoop-NN-01 ~]# yum install uuid* [root@Hadoop-NN-01 ~]# yum install libuuid [root@ ...

  9. CentOS7 开放服务端口

    CentOS 7 默认是firewall防火墙 如果你想让一个web服务可以被其它机子访问,就得开放这个服务的端口,不然就会被拦截 1. 开放端口命令 firewall-cmd --add-port= ...

  10. cocos2dx C++ imageView(图片/九宫格)相关属性大全

    ImageView * imageView = ImageView::create("cocosui/ccicon.png");//新建图片 imageView->setSc ...