zoukankan      html  css  js  c++  java
  • python基础一 day14 生成器函数进阶

    def generator():
    print(123)
    content = yield 1
    print('=======',content)
    print(456)
    arg = yield 2
    ''''''
    yield
    g1 = generator()
    g2 = generator()
    g1.__next__()
    g2.__next__()
    print('***',generator().__next__())
    print('***',generator().__next__())

    g = generator()
    ret = g.__next__()
    print('***',ret)
    ret = g.send('hello') #send的效果和next一样
    print('***',ret)

    send 获取下一个值的效果和next基本一致
    只是在获取下一个值的时候,给上一yield的位置传递一个数据
    使用send的注意事项
    第一次使用生成器的时候 是用next获取下一个值
    最后一个yield不能接受外部的值

    获取移动平均值
    10 20 30 10
    10 15 20 17.5
    avg = sum/count
    def average():
    sum = 0
    count = 0
    avg = 0
    while True:
    num = yield avg
    sum += num # 10
    count += 1 # 1
    avg = sum/count

    avg_g = average()
    avg_g.__next__()
    avg1 = avg_g.send(10)
    avg1 = avg_g.send(20)
    print(avg1)

    预激生成器的装饰器
    def init(func): #装饰器
    def inner(*args,**kwargs):
    g = func(*args,**kwargs) #g = average()
    g.__next__()
    return g
    return inner

    @init
    def average():
    sum = 0
    count = 0
    avg = 0
    while True:
    num = yield avg
    sum += num # 10
    count += 1 # 1
    avg = sum/count

    avg_g = average() #===> inner
    ret = avg_g.send(10)
    print(ret)
    ret = avg_g.send(20)
    print(ret)

    python 3
    def generator():
    a = 'abcde'
    b = '12345'
    for i in a:
    yield i
    for i in b:
    yield i
    def generator():
    a = 'abcde'
    b = '12345'
    yield from a
    yield from b

    g = generator()
    for i in g:
    print(i)

    send
    send的作用范围和next一模一样
    第一次不能用send
    函数中的最后一个yield不能接受新的值

    计算移动平均值的例子
    预激生成器的装饰器的例子
    yield from





  • 相关阅读:
    EF上下文容器,保存线程唯一性
    zabbix 监控服务器的TCP状态
    C++ 类里面,函数占用存储空间问题
    大道至简第一章读后感(伪代码)
    读大道至简有感
    String 部分源码分析
    LinkedList 源码分析
    ArrayList 源码分析
    定时取数据库的schema,并推送到git服务器
    全面解读python web 程序的9种部署方式
  • 原文地址:https://www.cnblogs.com/wang-tan/p/11062963.html
Copyright © 2011-2022 走看看