python-task2-生成器、迭代器

可迭代对象

字符串(str)、列表(list)、字典(dict)、集合(set)

条件:实现了__iter__()函数的独享

判断是否为可迭代对象的办法:
  1. 第一种办法

    from collections.abc import Iterable
    
    print(isinstance([1,2,3],Iterable))
    
  2. 第二种办法

    print iter([1,2,3])
    

迭代器

条件:可以通过next()方法不断重复获取下一个值,直到所有元素全部输出完之后,返回stopiteration才停止

python3:同时实现了__iter__()和__next__()函数对象,其中__iter__返回迭代器自身,__next__返回下一个元素值

class MyIter:
	def __init__(self):
		self.cnt = 0
	def __iter__(self):
		return self
	def __next__(self):
return 1

生成器

与迭代器的区别:内存开销更少,生成器并不是一上来就把所有值装载进内存,因而也不会占用大量的内存,只是在需要使用next()函数获取值的时候,才会取一个值返回。(如果在一个1G的文件,查看文件的话,直接加载到内存是很浪费的)

1. 第一种写法
gen = (i for i in range(100))

2. 第二种写法
def generator(k):
	i =1
	while True:
		yield i **k
		i +=1
gen = generator(2) 
for i in range(4): 
	sum = 0 
sum += next(gen) #相当于每次使用next()之后,generator函数停止了
yield的用法

https://blog.youkuaiyun.com/mieleizhi0522/article/details/82142856/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值