zoukankan      html  css  js  c++  java
  • 迭代器

     1 #!/usr/bin/env python
     2 # -*- coding=utf-8 -*-
     3 
     4 """
     5 可以直接作用于for循环的对象成为可迭代对象 iterable
     6 1、集合数据类型
     7     list、tuple、dict、set、str
     8 2、generator
     9     包括生成器和带yield的generator
    10 """
    11 
    12 #可以使用isinstance()判断对象是否是 Iterable对象
    13 from collections import Iterable
    14 
    15 isinstance([],Iterable)  #True
    16 
    17 isinstance({},Iterable)  #True
    18 
    19 isinstance('abc',Iterable)  #True
    20 
    21 isinstance((x for x in range(10)),Iterable) #True
    22 
    23 isinstance(100,Iterable)  #False
    24 
    25 #可以被next()函数调用并不断返回下一个值得对象称为迭代器  Iterator
    26 #可以使用isinstance()判断对象是否是 Iterator对象
    27 isinstance(100,Iterator) #False
    28 
    29 isinstance('abc',Iterator) #False
    30 
    31 isinstance([],Iterator) #False
    32 
    33 isinstance((),Iterator) #False
    34 
    35 isinstance((x for x in range(10)),Iterator) #True
    36 
    37 '''
    38 1、生成器都是Iterator对象
    39 2、但list、dict、str虽然是Iterable,却不是Iterator
    40     原因:因为Python的Iterator对象表示的是一个数据流,
    41     可以把这个数据流看做是一个有序序列,
    42     但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据
    43     所以Iterator得计算是惰性的,只有在需要返回下一个数据的时候他才会计算      
    44 '''
    45 
    46 #把list、dict、str等Iterable变成Iterator可以使用iter()函数
    47 isinstance([],Iterator) #False
    48 
    49 isinstance(iter([]),Iterator) #True
    50 
    51 """
    52 总结:
    53 1、凡是可作用于for循环的对象都是Iterable对象
    54 2、凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列
    55 3、但list、dict、str虽然是Iterable,却不是Iterator,可以使用iter()函数变成Iterator
    56 """
    57 
    58 #for循环本质就是通过不断调用next()函数实现的:
    59 #例如:
    60 for x in range(1,10):
    61     pass
    62 
    63 #等价于:
    64 
    65 #首先获得Iterator对象:
    66 it=iter(range(1,10))
    67 while True:
    68     try:
    69         #获得下一个值
    70         x=next(it)
    71     #遇到StopIteration就退出循环
    72     except StopIteration:
    73         break
  • 相关阅读:
    构造代码块重要理解
    Java中静态代码块、构造代码块、构造函数、普通代码块
    MySQL-分组查询(GROUP BY)及二次筛选(HAVING)
    mysql select将多个字段横向合拼到一个字段
    java语言支持的变量类型
    static修饰属性,方法,类
    恶意代码分析----网络环境配置
    Windows反调试技术(下)
    Windows反调试技术(上)
    脱壳入门----常见的寻找OEP的方法
  • 原文地址:https://www.cnblogs.com/LYliangying/p/7605900.html
Copyright © 2011-2022 走看看