python6_1生成器和迭代器

生成器:(一边循环一边计算)
学习地址:https://www.cnblogs.com/wj-1314/p/8490822.html
目的:不必创建完整list,节省内存
理解:

  1. 一个函数中只要存在yield就代表不是一个普通函数,而是一个生成器
  2. 函数每次运行到yield后就会停止运行,等下次再调用时再继续执行yield之后的语句,再循环执行到yield后又停止()
  3. 当生成器中有返回值语句return时,直接不能拿到返回值,需要捕获StopIteration错误,返回值包含在StopIteration的value中
 try:
        pass
  except StopIteration as e:
        print("生成器返回值:",e.value)

迭代器(Iterator),可迭代对象(Iterable),生成器(generator):
在这里插入图片描述

  1. 可迭代对象:直接作用于for 循环的对象(一种是如list的集合数据类型,一类是generator,包括生成表达式和带yield的函数)
  2. 迭代器:可以被next()函数调用并不断返回下一个值的对象
  3. 生成器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,生成器是迭代器的一种
  4. iter()函数可以使可迭代对象变成迭代器
    注:文件是可迭代对象,也是迭代器
    yield:
  5. 一个函数中只要存在yield就代表不是一个普通函数,而是一个生成器,可用于迭代。该函数可用于某个函数的参数,只要这个函数的参数也允许迭代参数。
  6. yield是一个类似return 的关键字,每次运行到yield后返回yield后买你的值并且停止运行,等下次再迭代时再继续执行yield之后的语句,再循环执行到yield后又停止
    3.send()和next()的区别就在于send可传递参数给yield表达式,这时候传递的参数就会作为yield表达式的值

迭代器:
iter(a) :参数a是一个可迭代对象,把一个可迭代对象转化成一个迭代器
可迭代对象iterable:对象包含_ _ getitem_ _ ,_ _ iter _ _
迭代器interator:对象包含_ _ next _ _,,迭代器可以使用next()方法取数

def _ _ iter _ _(self): 
    return self  #固定写法

_ _ next _ _:一个变量村粗数据,另一个变量存储索引

class Test():  
 #一般的类里没有__iter__和__next__方法,如果定义类的时候加上了这两个方法,则标识这个类的对象就变成了一个迭代器
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        """
        # 这里固定这样写就行
        """
        return self

    def __next__(self):
        """
        # 一个变量存储数据,另一个变量存储索引。
        """
        try:
            item = self.data[self.index]
            self.index += 1
            return item
        except IndexError:
            raise StopIteration

test = Test(['a', 'b', 'c', 'd'])
#方式一:使用for遍历
for i in test:
    print(i)
#方式二:使用__next__()方法,每调用一次循环一次
print(test.__next__())
#方式二:使用next()方法,每调用一次循环一次
print(next(test))

生成器:
生成器表达式,生成器函数
通过一个代码块来生成数据,节省内存
yield理解:暂存,每次调用时,循环只执行一次,

class Generator(object):
#使用yield来标识这是一个生成器

    def __init__(self, count, price):
        self.count = count
        self.price = price

    def test(self):
        for i in range(self.count):
            yield (i + 1) * self.price
if __name__ == '__main__':
    cart = Generator(5, 0.8)
    good = cart.test()
    print(good.__next__())  #使用内置方法__next__()调用
        for g in good:  #使用for遍历
        print(g)

生成器练习:

def check_file(filename):
    with open(filename,encoding='utf-8') as f:   #句柄 : handler,文件操作符,文件句柄
        for i in f:
            yield '***'+i

for i in check_file('test.txt'):
    print(i.strip())

#打印结果:
***aaa
***bbbbb
***cccccc
***
***dddddd
***cccc
无极原创软件是一款批量制造出原创内容的软件,本软件是根据国内大型SEO公司,制造出来的文章可读率100%。能根据网站关键字,在内容对对网站所有关键字进行批量“加粗”、“加超链”“轮链”.....等操作,用内页的内链来提升网站整体权重,内链的建设一点不比外链差。最主要的是,无极原创可以批量制造出“长尾关键字”的文章。 本软件是根据国内某大型SEO公司的内部软件为原型,然后再以太极八卦的“道生一、一生二、二生三....”的原理进行重新整合编写的,故名叫“无极原创”。   适合人群: 1.草根站长:草根站长都是单打独斗的,每天既要搞高质量的内容更新网站,又要做外链,忙里忙外的,累死人。无极原创可以把这两样都解决掉! 2.SEO工作室:帮用户提升网站排名,相关类型的原创文章肯定是必须的,做外链所发的高质量相关文章也是必须要有的,使用无极原创,一个人也可以搞SEO工作室。 3.站群:做站群是赚钱的,如果全部用原创文章做站群,那收入肯定会翻上几番的。做站群的不用考虑了,赶快购买无极原创吧。 4.做百度知道:可以随心所欲的生成百度知道提问的问题,以此来做外链和推广。(本软件生成的内容,可以导入到这些软件进行使用!) 5.兼职做站:白天上班,下班做网站,没时间休息和泡妞,没时间陪家人,而且网站还是半死不活的那种。购买了无极原创软件,我们教你统统用软件来解决,我们的宗旨是:简单的事情重复做,重复做的事情软件做。 6.淘宝客:这个我就不多说了,做淘宝客的朋友心里有数。高质量的相关文章和高质量的外链,意味着订单。 7.其他:却始终没有赚到钱的人,我们会教你怎么赚钱?做什么样的网站投入少,赚钱多。无极原创所用面实在是太广了,可扩展性实在是太高了,只要是内容方面的,都可以用到....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值