python-迭代器和生成器

一、迭代器

1、迭代器iterator中只能包含可迭代对象。可用于for循环的对象是可迭代对象Iterable,如list,tuple等,可迭代对象不能用__next__()访问元素

2、能用于for循环,且能通过__next__()访问的对象是迭代器Iterator,如生成器就是一个迭代器对象

3、只能通过__next__()依次获取迭代器中的元素,不能通过下标才查找

4、读取量很大的数据时,用迭代器可节省内存

>>> a=iter([1,2,3,4])
>>> b=iter((5,6,7,8))
>>> a.__next__()
1
>>> a.__next__()
2
>>> b.__next__()
5
>>> b.__next__()
6

 

4、判断一个对象是否为可迭代对象 和 迭代器对象

>>> from collections import Iterable
>>> from collections import Iterator

>>> list1 = [1,2,3,4]  #list1是一个可迭代对象
>>> a = iter(list1)   #将list转化为迭代器对象

>>> isinstance(list1,Iterable)
True
>>> isinstance(list1,Iterator)
False
>>> isinstance(a,Iterator)
True
>>> isinstance(a,Iterable) #迭代器对象一定是可迭代对象
True

>>> b = list(a) #将迭代器对象转化为list
>>> b
[1, 2, 3, 4]

 

二、生成器

1、返回迭代器的函数是一个生成器generator。生成器可用于for循环,也可用__next__()取值

#函数func(n)是一个生成器,返回包含斐波拉契数列的一个迭代器。
def func(n):
    a, b = 0, 1
    for i in range(n):  
        yield b
        a, b = b, a+b

#func()是一个生成器,可用于for循环
for i in func(3):
    print(i)

 

2、另一种创建生成器的方法

>>> a = [x**2 for x in range(3)]
>>> a
[0, 1, 4]
>>> type(a)
<class 'list'>

>>> b = (x**2 for x in range(3)) #b是一个生成器
>>> b
<generator object <genexpr> at 0x0221CB70>
>>> for i in b:
...     print(i)
...
0
1
4
>>>

 

转载于:https://www.cnblogs.com/jessicaxu/p/7743416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值