python-生成器进阶~生成器函数

Posted dwenwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-生成器进阶~生成器函数相关的知识,希望对你有一定的参考价值。

监听文件末尾追加的例子
def tail():
    f = open(文件,r,encoding=utf-8)
    f.seek(0,2)
    while True:
        line = f.readline()
        if line:
            yield line
        import time
        time.sleep(0.1)

g = tail()
for i in g:
    print(i.strip())

 send 方法

send方法:
def func():
    print(**10)
    a = yield 5
    print(a)
    yield 10

g = func()
print(g.__next__())
print(g.send(wenwen))
# print(g.__next__())

从哪一个yield开始接着执行,send就把一个值传给了那个yield
send 不能用在第一个触发生成器
生成器函数中有多少个yield就必须有多少个next+send
def averager():
    total = 0.0
    count = 0
    averager = None
    while True:
        term = yield averager
        total += term
        count += 1
        averager = total/count

g_avg = averager()
print(g_avg.__next__())
print(g_avg.send(20))

 


生成器的预激装饰器
技术分享生成器的预激装饰器

 


生成器函数:生成一个生成器函数
生成器的本质是迭代器
生成器函数的特点:带有yield关键字
且调用后,函数内的代码不被执行
触发执行的方式:next send for循环
next 和 send 是执行几次拿几次的数据,可能会遇到取完的数据
for循环是每次取一个,取完为止,for循环不会报错

触发执行的方式:
next
send(选会):send(None) == _next_(),send在next的基础上传一个值到生成器函数内部
send操作不能用在生成器使用的第一次
for 循环

技术分享在衣服厂定衣服的例题
def cloth():
    for i in range(100):
        yield 衣服%s%i

g1 = cloth()
g2 = cloth()
print(g1.__next__())
print(g1.__next__())
for c in cloth():
    print(c)
for i in range(10):
    print(g1.__next__())
for i in range(100):         #由于总数是100,已经取了10个了,当range里面为100时,剩下的90个数不够取100个就会报错
    print(g1.__next__())
for i in g1:                  #这种方法就不会报错,有多少取多少
    print(g1.__next__())
for c in g1:
    print(c)
    if c.endswith(80):
        break
print(**20)
for c in g1:
    print(c)

 


例题:要求执行结果为‘A‘,‘B‘,‘C‘,‘D‘
def func():
    a = AB
    b = CD
    # yield from a
    for i in a:yield i
    # yield from b
    for i in b:yield i

g = func()
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
g._next_()也可以用next(g)来表示
g._iter_()也可以用iter(g)来表示
不是所有的_方法_都可以使用方法()来表示
 

























以上是关于python-生成器进阶~生成器函数的主要内容,如果未能解决你的问题,请参考以下文章

python—函数进阶-列表生成式,生成器,

Python函数进阶:闭包装饰器生成器协程

Python 进阶_生成器 & 生成器表达式

python_函数进阶3

Python进阶(迭代,函数式编程,Collections类)

python开发函数进阶:可迭代的&迭代器&生成器