Python学习之生成器

递归和迭代的概念

递归
自己调用自己,知道遇到终止条件(return)才会停止递归
迭代
每一次的循环都需要依赖上一次执行的结果
迭代器

可迭代对象

当一个对象在他的内部定义了一个__iter__()方法时,它也就相当于是一个可迭代对象,它也就遵循了迭代器协议。

迭代器协议

当对象中提供的有next方法,就可以认为它是一种迭代器,当执行next方法的时候,它就会执行执行下一项,当迭代终止时就会报Stopiter异常。

举个栗子

朕的大清亡了。
皇帝它也是一个人,吃喝拉撒睡,但是当他把要当皇帝的时候,就意味着要给他定义一个__iter__方法。当他挂掉的那一刻就会执行next方法,他的儿子即位。一直这样下去,但是很不幸,迭代到溥仪这,大清亡了,封建帝制也没了,这时报了StopIteration异常。

万能的for循环

	for循环,他自身就是一个迭代器,通过循环遍历下一个元素。它可以遍历字符串,列表,元祖,集合,文件。但是这些东西均不是可迭代对象,使用for循环,调用了这些东西内部__iter__方法,进而也就变成了一个可迭代对象,最后调用__next__方法。遍历输出内容。
	for循环其实就是根据迭代器进行工作的,他一定要用__iter__方法。然后调用next方法进行迭代。
  • 字符串遍历

    x = “axl”
    iter_x = x.iter()#使用__iter__方法让他变成一个可迭代对象
    print(iter_x.next())#调用__next__()方法让其声成为迭代器
    print(iter_x.next())
    print(iter_x.next())

注意当他报StopIteration方法是说明内容已经遍历完了。

  • 列表

    x = [1,2,3,4,5,6,7,8]
    iter_x = x.iter()
    print(iter_x.next())
    print(iter_x.next())

    从上边例子可以看出,字符串列表他们虽然不是可迭代类型,但是当他们调用__iter__对象时,声明了它是可迭代的类型,然后调用next方法,进行遍历。
    for循环就是调用对象的__iter__方法,将其转换成一个迭代器,接着使用next方法来实现循环访问,这样for循环就可以来遍历他们咯!!!

  • 文件使用迭代的好处

文件中使用可迭代对象,不会占用过多的内存空间,当用readline方法读取一行文件时,他是把整个文件先加载到整个文件中,然后再去读,而生成可迭代对象只有在读取文件的时候才回去访问,不会占用过大内存,不访问的时候不掉用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值