生成器的扩展 ------ send() 方法

生成器的 send() 方法g.send (‘A‘)

1 send 和 next 的工作的起止位置是完全相同的

2 send 可以把一个值作为 信号量 传递到函数中去

3 并且 在生成器开始  只能先使用next

4 send(‘a‘)改变上一次yield的内容  可以用yield 返回同一个改变的值来返回

#  def fun():
#     print(1)
#     yield 2  #888
#     print(3)
#     value=yield 4    #value---None
#     print(6)
#     yield value
#
# g=fun()
# print(g.__next__())
# print(g.send(888))
# print(g.__next__())


  ---------------------------生成器 预激 函数-------------------------------

def wrapper(func):
    def inner(*args,**kwargs):
        re=func()
        re.__next__()
        return re
    return inner

@wrapper
def average_fun():
    total=0
    count=0
    average=0
    while True:
        value=yield average
        total+=value
        count+=1
        average=total/count

g=average_fun()
print(g.send(30))
print(g.send(20))
print(g.send(20))
时间: 2024-10-03 22:56:12

生成器的扩展 ------ send() 方法的相关文章

【Python学习之十】yield之send方法

yield作用 简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.下面以斐波拉契数列来做个说明: # 普通的函数实现 def fib(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a + b n = n + 1 return 'done' """不足: 在 fab 函数中用 pri

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

利用 send 方法计算多个数的平均数

利用 send 方法计算多个数的平均数,并且可以多次输入: def averager(): # 创建一个生成器函数 sum = 0 # 创建一个总数变量 count = 0 # 创建一个个数变量 avg = 0 # 创建一个平均数变量 while True: # while 循环 num = yield avg # 先执行 next,然后再执行 send,yield avg 接受 send 返给函数的值,传给 num. sum = sum + num # 第一次 sum = 0 + 10 (nu

【Javascript】jQuery Validate扩展验证方法

/*****************************************************************jQuery Validate扩展验证方法*****************************************************************/// 判断整数value是否等于0 jQuery.validator.addMethod("isIntEqZero", function (value, element) { valu

python3学习之类成员、扩展父类方法的功能

##类成员包括: #字段:静态字段.普通字段    字段也可以理解为"变量" #方法:普通方法.静态方法.类方法:所有方法属于类    方法也可以理解为"函数" #属性:具有方法的定义形式,具有字段访问形式         用字段的访问方式调用方法,就需要定义"属性" #当不想创建对象访问类中方法时,方法需要是静态方法 ##成员修饰符 #公有字段   内外都可以访问 #__name   私有字段,前面有两个下划线,只在类中可以访问,通过对象访问不

子类继承父类后想要扩展父类方法

1 >>> class PClass(object): 2 def setInfo(self,sex='Male'): 3 self.gender = sex 4 5 6 >>> class CClass(PClass): 7 def setInfo(self,who): 8 self.name = who 9 PClass.setInfo(self)#子类继承父类后想要扩展父类方法,若仍想保留父类方法可以通过回调 10 11 12 >>> x = C

jQuery Validate扩展验证方法

/***************************************************************** jQuery Validate扩展验证方法 (linjq) *****************************************************************/ $(function(){ // 判断整数value是否等于0 jQuery.validator.addMethod("isIntEqZero", functio

PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】

一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装.其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 和 GOST加密算法,并且提供了CBC.OFB.CFB 和 ECB 四种块加密的模型. 二:安装libmcrypt依赖库 要使用该扩展,必须首先安装mcrypt标准

Ajax中send方法参数的使用

一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : var url = "login.jsp?user=XXX&pwd=XXX"; xmlHttpRequest.open("GET",url,true); xmlHttpRequset.send(null); 此外,也可以使用send方法传递参数.使用send方法传递参数使用的是POST方法,需