python学习之迭代器

迭代

简单的说,可将某个数据集内的数据依次取出,叫做迭代

可迭代协议

内部实现的_iter_方法

常见的可迭代对象类型

str,list,tuple,dict,set,range,文件句柄

# 查看str是否可迭代

print(dir(str))

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__',
 '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__',
 '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__',
 '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs',
 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 
'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle
', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',
 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

判断某对象是不是可迭代对象,有两种方法:

  1. print(‘__iter__’ in dir(str))

  2. from collections import Iterable
    print(isinstance('abc',iterable)
    print(isinstance('abc',str))

迭代器定义

内部含有__iter__且含有__next__方法的对象就是迭代器,遵循迭代器协议

  • 将可迭代对象转化成迭代器
s1 = 'abcd'
obj_s = s1.__iter__()
  • 将可迭代对象转化成迭代器
obj_s = iter(s1)
print(obj_s)
print(obj_s.__next__())

判断当前对象是否是迭代器的两种方法

s1 = 'abc'
print('__iter__' in dir(s1))
print('__next__' in dir(s1))
from collections import Iterator
l1 = [1,2,3]
print(isinstance(l1,Iterator))
l1_obj = l1.__iter__()
print(isinstance(l1_obj,Iterator))

迭代器的好处

  • 节省内存
  • 惰性机制
  • 单向执行,不可逆









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值