生成器send的用法案例

生成器函数send方法案例:每输入一个值,求移动平均值,如下:10 20 30 40 50...10 15 20 25 30...
def avg_creater():
    num = 0
    count = 0
    avg = 0
    while True:
        num1 = yield avg
        num += num1
        count += 1
        avg = num/count

g = avg_creater()
g.__next__()
avg = g.send(10)
avg = g.send(20)
avg = g.send(30)
avg = g.send(40)
avg = g.send(50)
print(avg)

#打印:
30.0
但是每次使用时,第一次读取数据都必须用next接收,所以可以把这一步可以用装饰器函数替代,从而不用每次调用都要先使用next预激生成器函数:
def avgcorator(f):
    def inner(*args,**kwargs):
        g = f(*args,**kwargs)
        g.__next__()
        return g
    return inner

@avgcorator
def func():
    num = 0
    count = 0
    avg = 0
    while True:
        num1 = yield avg
        num += num1
        count += 1
        avg = num / count
g = func()
avg = g.send(10)
avg = g.send(20)
avg = g.send(30)
avg = g.send(40)
avg = g.send(50)
print(avg)

#打印:
30.0
知识点:生成器:send装饰器

原文地址:https://www.cnblogs.com/aizhinong/p/11378062.html

时间: 2024-11-02 12:14:16

生成器send的用法案例的相关文章

jQuery中的ajax用法案例

什么是 AJAX? AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行显示. 使用 AJAX 的应用程序案例:谷歌地图.腾讯微博.优酷视频.人人网等等. 关于 jQuery 与 AJAX jQuery 提供多个与 AJAX 有关的方法. 通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本

MVC4 jquery 样式 主题 用法(案例)

MVC4已经自带了jquery,新建的项目,基本上什么都不用添加就可以运行,跑项目.(集成了那么多东西,jquery,modernizr,自带的默认权限,生成的模板,但是缺没有一个统一的文档或者什么去介绍已经集成的东西,怎么个用法 各种百科) 第一步: [项目]-[管理NuGet程序包] 点击更新 输入jquery ui 然后更新jquery ui插件到最新版本 第二步: 在项目中 [view]-[Shared]-[_Layout.cshtml] 公共界面 统一引用 方便以后修改. @Scrip

Java Me-List控件的用法案例

/** * Java Me-List控件的用法案例 */package com.xushouwei.cn; import java.io.IOException;import javax.microedition.lcdui.Choice;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;im

Python--迭代器和生成器的定义和案例

迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问

PythonStudy——生成器send方法

# send的工作原理# 1.send发生信息给当前停止的yield# 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止 # 案例: persons = ['张三', '李四', '王五', '赵六', '钱七'] def order(persons): for i in range(len(persons)): if i == 0: print('%s在面试' % persons[0]) else: print('%s叫%s在面试' % (name, pe

ajax的异步,与send的用法

xhr = new XMLHttpRequest(); xhr.open("get", "01list.ashx", true) xhr.setRequestHeader("If-Modeified-Since", 0); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var  res= xhr.resp

python 生成器 send

#!/usr/bin/python3 def MyGenerator(): value=yield 1 yield value return done gen=MyGenerator() print(next(gen)) print(gen.send("I am Value")) 生成器内有一个方法send,可再次传入一个值. 上面那句可能听不懂,但是不要紧,我们先来看看代码, #!/usr/bin/python3 def MyGenerator(): value=yield 1 yi

PYTHON学习0038:函数---生成器send方法---2019-7-2

函数生成器中,send的作用:1.换新生成器继续执行2.发送一个信息到生成器内部.和next()的区别:next只是唤醒生成器并继续执行,next()就相当于没有发送值或者默认发送一个None给函数内部.send(None)和next()效果一样.例子:def range(n):count=0while count<n:print("count",count)count+=1sign=yield countprint("------sign",sign)t=r

CAF(C++ actor framework)使用随笔(各种send通信用法)(三)

c). 同步发送, 等待响应, 超时后收到1个系统消息. 贴上代码 #include <iostream> #include "caf/all.hpp" #include "caf/io/all.hpp" #include <string> #include <thread> #include <chrono> #include <unistd.h> using namespace std; using n