python容器和迭代器_python容器迭代器生成器

title: python之容器迭代器生成器

data: 2018-4-7

categories:

python

tags:

python

放张图片

relationships.png

容器(container)

容器是用来储存元素的一种数据结构,容器将所有数据保存在内存中,Python中典型的容器有:list,set,dict,str等等。

class test():

def __init__(self,data=1):

self.data = data

def __iter__(self):

return self

def __next__(self):

if self.data > 5:

raise StopIteration

else:

self.data+=1

return self.data

for item in test(3):

print(item)

4

5

6

1234

for … in… 这个语句其实做了两件事。第一件事是获得一个可迭代器,即调用了__iter__()函数。

第二件事是循环的过程,循环调用__next__()函数。

对于test这个类来说,它定义了__iter__和__next__函数,所以是一个可迭代的类,也可以说是一个可迭代的对象(Python中一切皆对象)。

迭代器

含有__next__()函数的对象都是一个迭代器,所以test也可以说是一个迭代器。如果去掉__itet__()函数,test这个类也不会报错。如下代码所示:

class test():

def __init__(self,data=1):

self.data = data

def __next__(self):

if self.data > 5:

raise StopIteration

else:

self.data+=1

return self.data

t = test(3)

for i in range(3):

print(t.__next__())

4

5

6

1234

生成器

生成器是一种特殊的迭代器。当调用fib()函数时,生成器实例化并返回,这时并不会执行任何代码,生成器处于空闲状态,注意这里prev, curr = 0, 1并未执行。然后这个生成器被包含在list()中,list会根据传进来的参数生成一个列表,所以它对fib()对象(一切皆对象,函数也是对象)调用__next()__方法,

def fib(end = 1000):

prev,curr=0,1

while curr < end:

yield curr

prev,curr=curr,curr+prev

print(list(fib()))

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值