python迭代器

import collections.abc
from collections.abc import Iterable, Iterator
import collections
# collections.abc是Python内建的一个集合模块,提供了许多有用的集合类(dict、list、set、tuple)。
# iterable:可迭代的;可迭代对象;可遍历对象
# iterable(可迭代对象) 和 iterator(迭代器)是两个概念
# 生成器是一种特殊的迭代器;列表、元组、字符串、字典、迭代器都是可迭代对象,且都包含迭代器。
# 每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
'''
迭代器与生成器的异同:
1.生成器是一种特殊的迭代器,拥有迭代器的所有特性;
2.迭代器使用return返回值而生成器使用yield返回值,每一次对生成器执行next()都会在yield处暂停;
3.迭代器和生成器虽然都执行next()方法时返回下一个元素,迭代器在实例化前就已知所有元素,但是采用惰性计算机制,
共有多少元素,下一个元素是什么都是未知的,每一次对生成器对象执行next()方法才会产生下一个元素。'''

'''在Python中,我们把所有可以迭代的对象统称为可迭代对象,有一个类专门与之对应:Iterable。
所以,要判断一个类是否可迭代,只要判断是否是Iterable类的实例即可。
整型、布尔不可迭代,字符串、列表、字典、元组可迭代。'''
print(isinstance(2, collections.abc.Iterable))  # False
print(isinstance(True, collections.abc.Iterable))  # False
print(isinstance((1, 2, 3), collections.abc.Iterable))  # tuple
print(isinstance({1: 'a', 2: 'b', 3: 'c', 4: 'd'}, Iterable))  # dict
print(isinstance({1, 2, 3, 5, 5, 3, 2}, Iterable))   # set
print(isinstance([1, 2, 3, 4, 5], Iterable))  # list 列表是可迭代对象,但不是迭代器
print(isinstance([1, 2, 3], Iterator))  # False 列表不是迭代器

'''迭代器一定是可迭代对象,但可迭代对象不一定是迭代器。
iter()函数可以让具备迭代性的对象变成迭代器(可使用next()函数访问)'''
print(isinstance(iter([1, 2, 3]), Iterator))  # True
print(next(iter([1, 2, 3])))
print(next(iter([1, 2, 3])))
print(next(iter([1, 2, 3])))
list1 = iter([5, 6, 7])
print(next(list1))
print(list1.__next__())
print(next(list1))


'''只要一个对象定义了__iter__()方法,那么它就是可迭代对象。'''


class A:
    def __iter__(self):
        pass


print('A类是可迭代对象吗:', isinstance(A(), Iterable))

'''迭代器是对可迭代对象的升级,一个对象定义了__iter__()方法,那么它就是可迭代对象,
如果一个对象同时实现了__iter__()和__next()__()方法,那么它就是迭代器。'''


class B:
    def __iter__(self):
        pass

    def __next__(self):
        pass


print('B是可迭代对象吗:', isinstance(B(), Iterable))
print('B是迭代器吗:', isinstance(B(), Iterator))


#  Counter:字典的子类,提供了可哈希对象的计数功能
print(collections.Counter('python'))  # 统计字符出现的次数
print(collections.Counter('hello world hello lucy'.split()))  # 统计单词个数

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值