学习笔记--Python遍历

python 遍历操作

遍历 for in

什么是遍历:按照特定次序访问数据元素的过程。
for in 语句in后面跟 可迭代对象/迭代器/支持序列协议的对象
什么是可迭代对象/迭代器/支持序列协议的对象呢
实现了__iter__方法的对象叫可迭代对象
实现了__iter__与__next__方法的对象叫迭代器
序列协议 — Python 3.7.13 文档
有点抽象对吧
下面我们看实例(需要学习完面向对象知识!!!)

  • _getitem_(self, item)方法( 注意停止条件,否则一直循环)
def __init__(self):
	self.result = 1
def __getitem__(self, item):  
	self.result += 1  
	if self.result >= 6:  
		print(item)  
		print("这是一个getitem方法")  
		raise StopIteration("停止遍历")  
	return self.result

我们可以用Python的一个库来判断一个对象是可迭代对象还是迭代器

# Iterator  迭代器
# Iterable  可迭代对象
from collections.abc import Iterator, Iterable
a = 1
print(isinstance(a, Iterable))
  • _iter_(self)方法( 该方法的优先级大于__getitem__方法 )实现了__iter__方法,叫作可迭代对象
def __iter__(self)
	return self
  • __iter__和__next__方法 实现了这两个方法,叫作迭代器
def __init__(self):  
	self.result = -1  
def __iter__(self):  
	self.result = -1  
	return self  
def __next__(self):  
	self.result += 1  
	if self.result > 6:  
	raise StopIteration("停止遍历")  
	return self.result

注意:当我们把__iter__注释,留下_next_,此时,这个对象也可以用next函数/__next__来进行取值
但是不能用for - in 来遍历,它不是可迭代对象也不是迭代器了

def __init__(self):  
	self.result = -1  
def __next__(self):  
	self.result += 1  
	if self.result > 6:  
	raise StopIteration("停止遍历")  
	return self.result

小知识点:for in 的原理或者说他是怎么实现循环取值的
先用iter函数将需要进行遍历的对象转换为迭代器,在用next函数来对这个迭代器进行取值

当我们使用iter(对象)函数时,将会调用该对象的_iter_方法, 但是该方法是返回一个迭代器,所以我们只实现__iter__方法没有实现迭代器取值逻辑或依据时,会报错。我们还需要实现__next__方法,才可以使用iter函数将对象转换为一个迭代器
如果这个对象不是可迭代对象,但是***支持序列访问协议(_getitem_)***那也可以用iter将其变成迭代器

iter函数

当我们传两个参数的时候iter(对象, 终止值)
会直接调用对象,所以我们要实现__call()__方法,让对象变成可被调用,随后返回一个callable_iterator对象,该对象是迭代器,可以取值,取值范围是终止值 4

def __call__(self, *args, **kwargs):  
	print("call")  
	if self.result >2:  
	raise StopIteration()  
	self.result += 1  
	return self.result
	
a = Animal()  
pt = iter(a, 4)  
print(pt)  
for i in pt:  
print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值