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

     1 '''
     2 可迭代对象:
     3 概念:可以直接作用于for循环的对象,叫做可迭代对象[Iterable]
     4 判断方式:判断一个对象是否为可迭代的对象:isinstance(obj, Iterable)
     5 可以直接作用于for的对象:
     6 1、基本数据类型:list  tuple dict set string
     7 2、generator生成器:带有yield的生成器函数
     8 '''
     9 
    10 # Iterable 如果使用,需要从collections.abc模块中导入
    11 from collections.abc import Iterable
    12 # 判断以后个对象是否为可迭代对象
    13 print(isinstance([], Iterable))   # T
    14 print(isinstance("", Iterable))   # T
    15 print(isinstance((), Iterable))   # T
    16 print(isinstance({}, Iterable))   # T
    17 print(isinstance(100, Iterable))   # False
    18 # x for x in range(3)  --> 产生一个列表,列表的数量根据range确定,列
    19 # 表的值,根据for前面的内容确定
    20 print(isinstance((x for x in range(3)), Iterable))   # True
    21 
    22 
    23 '''
    24 迭代器:
    25 概念:不仅可以作用于for循环,也可以使用next() 函数不断调用并
    26 获取下一个值,直到取出最后一个。当取出最后一个元素时,
    27 再继续调用next()时,会提出一个StopIteration错误表示无法继续
    28 下一个数据的提取。
    29 可以被next()函数调用并提取元素的对象称为迭代器对象。
    30 判断一个对象是否为迭代器对象:isinstance(obj, Iterator)
    31 '''
    32 print('************************华丽丽的分割线*********************')
    33 from collections.abc import Iterator
    34 print(isinstance([], Iterator))   # F
    35 print(isinstance("", Iterator))   # F
    36 print(isinstance((), Iterator))   # F
    37 print(isinstance({}, Iterator))   # F
    38 print(isinstance(100, Iterator))   # F
    39 print(isinstance((x for x in range(3)), Iterator))   # True
    40 
    41 li = (x for x in range(3))   # <generator object <genexpr> at 0x0000021950E1F9A8>
    42 # print(li)
    43 print('0000000000000000000000000')
    44 # for i in li:
    45 #     print(i)
    46 print(next(li))
    47 print(next(li))
    48 print(next(li))
    49 # 如果使用next提取元素,当元素全部提取结束,再提取时,
    50 # 返回StopIteration错误
    51 # print(next(li))   # StopIteration
    52 
    53 li1 = [1,2,3]
    54 # for i in li1:
    55 #     print(i)
    56 # print(next(li1))   # TypeError: 'list' object is not an iterator
    57 
    58 # 将list  dict  tuple  set  string 强转为迭代器   iter(obj)
    59 li2 = [100, 200, 300]
    60 iter1 = iter(li2)
    61 print(iter1)
    62 print(type(iter1))
    63 print(next(iter1))  # 100
    64 
    65 print(isinstance(iter([]), Iterator))
    66 print(isinstance(iter(()), Iterator))
    67 print(isinstance(iter({}), Iterator))
    68 print(isinstance(iter(""), Iterator))
    69 # print(isinstance(iter(100), Iterator))  # 强转失败
  • 相关阅读:
    ACwing98 分形之城 分形图
    ACwing96 奇怪的汉诺塔 递推
    ACwing95 费解的开关 bfs
    ACwing94 递归实现排列型枚举 dfs
    ACwing93 递归实现组合型枚举 dfs
    递归型枚举总结
    洛谷P2286 宠物收养场 splay
    python之路——初识数据库
    python之路——协程
    python之路——线程
  • 原文地址:https://www.cnblogs.com/BKY88888888/p/11266043.html
Copyright © 2011-2022 走看看