python大作战之迭代器初级篇

有一段时间没给大家分享python了,其实我也是很着急的,原因是我最近在学习装饰器,迭代器和生成器,同时也在想怎么能让大家一目了然

的看懂我所写的东西,那么今天就跟大家一起先来认识下迭代器。

大家知道,可以直接作用于for循环的数据类型有哪几种吗?

一类是集合数据类型,如list,tuple,dict,set,str等

一类是generator,包括生成器和带yield的generator function(这个后续会跟大家分享生成器,暂时在这里不提)

这些可以直接作用于for循环的对象统称为可迭代对象------Iterable

本次主要围绕下面四个方面:

1:iter()函数和next函数

2:stopiteration异常

3:使用for\while循环迭代

4:迭代str,list,tuple,dict

a:首先我们来讲iter()函数和next函数:

>>> fjh=['tom','amy','lily']
>>> x=iter(fjh)
>>> print(type(x))
<class 'list_iterator'>
从代码中可以看出使用iter()函数,实际上就得到一个迭代器,我们可以使用type来查看它的数据类型
另外对于next()函数:

>>> fjh=['tom','amy','lily']
>>> it=iter(fjh)
>>> print(next(it))
tom
>>> print(next(it))
amy
>>> print(next(it))
lily
从代码中可以看出next()可以计算出元素的值,next()是python中内置函数,后续会跟大家交流

b:对于stopiteration异常

如果按照上面所给的代码,再次调用内置函数next(),就会抛出异常

>>> print(next(it))
Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    print(next(it))
StopIteration
因为没有更多的元素可以遍历吧。

c:对于迭代集合数据类型

>>> fjh=['tom','amy','lily']
>>> fjh1=('tom','amy','lily')
>>> fjh2='学习python'
>>> fjh3={'tom','amy','lily'}
>>> it=iter(fjh)
>>> it1=iter(fjh1)
>>> it2=iter(fjh2)
>>> it3=iter(fjh3)
>>> print(next(it))
tom
>>> print(next(it1))
tom
>>> print(next(it2))
学
>>> print(next(it3))
lily
但是对于字典,这里需要单独列出来

>>> fjh={1:'A',2:'B',3:'C'}
>>> it=iter(fjh)
>>> for x in it:
	print(x,fjh[x])

	
1 A
2 B
3 C
d:使用for\while循环迭代

使用for循环迭代,在上面的代码中已经有展示

>>> fjh={'A','B','C'}
>>> it=iter(fjh)
>>> while True:
	try:
		print(next(it))
	except StopIteration as fsh:
		print('迭代结束')
		break

	
A
B
C
迭代结束
小结:

1:凡是可作用于for循环的对象都是Iterable类型

2:凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列

3:集合数据类型如list,dict,str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,生成器(Generator)是一种特殊的迭代器。生成器可以通过函数来创建,并使用yield语句来产生值。生成器可以按需生成值,而不是一次性生成所有值,这使得它们非常节省内存。 生成器和迭代器有以下几个共同点: 1. 都可以使用for循环进行迭代。 2. 都支持使用next()函数获取下一个元素。 3. 都可以使用iter()函数将其转换为迭代器对象。 生成器和迭代器的不同之处在于实现方式: - 迭代器是通过实现`__iter__()`和`__next__()`方法来创建的,其`__iter__()`方法返回迭代器对象本身,`__next__()`方法返回可迭代对象的下一个元素。 - 生成器是通过函数的yield语句来定义的。当函数被调用时,它返回一个生成器对象,每次调用生成器的next()方法或使用for循环迭代时,它会产生一个值并暂停,等待下一次调用。 下面是一个示例,展示了生成器和迭代器的使用: ```python # 迭代器示例 class MyIterator: def __iter__(self): self.counter = 1 return self def __next__(self): if self.counter <= 5: value = self.counter self.counter += 1 return value else: raise StopIteration # 创建迭代器对象 my_iter = MyIterator() # 使用for循环迭代 for num in my_iter: print(num) # 输出: 1, 2, 3, 4, 5 # 生成器示例 def my_generator(): num = 1 while num <= 5: yield num num += 1 # 创建生成器对象 my_gen = my_generator() # 使用for循环迭代 for num in my_gen: print(num) # 输出: 1, 2, 3, 4, 5 ``` 无论是使用迭代器还是生成器,我们都可以通过迭代来逐个访问元素,但生成器更加简洁和高效,因为它们按需生成值而不是一次性生成所有值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值