34-高级特性之generator(2)

摘要:
当g被消耗时,它将被销毁。{这次使用了一个元素}printforxing:#它可以使用四次。打印#g的元素已被用于。3.send(),next()__next_()是一个用于激活生成器send(实际参数)的函数,它可以向生成器发送数据以实现外部控制。send相当于next(对象名)和object name__next_();因此send()是一个核心代码测试:defgen:n=0while<times:temp=yield n*2printn=n+1 return“done”g=gen#5个循环,其中五个元素g.send#与next等价,启动生成器,在未来默认情况下,g.send#将666发送到tempprint(“”)forxing:#现在g中仍有三个元素打印

1. generator表达式:

#generator表达式
def test1():
    L = [ x*2 for x in range(5)] #list conprehension 
    G = ( x*2 for x in range(5))
    p(next(G))
    p(next(G))
    p(next(G))
    p(next(G))
    p(next(G)) #因为G的元素个数最大为5
    next(G) #报异常StopIteration
#test1()

def test2():
    G = ( x*2 for x in range(5))
    for g in G: #自动处理了StopIteration
        p(g)
#test2()

2. generator函数:yield

def fib(times):
    n=0
    a,b=0,1
    while n<times:
        yield b  #yield(放弃)函数执行到这个地方会交出CPU控制权,停止执行,调用next再继续
        a,b=b,a+b
        n=n+1
    return "done"
 
g = fib(5) #应该是5个元素,一次next(g)消耗一个。消耗完这个g就会销毁 {本次已经用了一个元素}
 
print(next(g),'
')
 
for x in g: #还能用4次
    print(x)
  
#print(next(g),'
') #g的元素已经被for用完了

3. send(), next(), __next__()

  • 都是用来激活generator的函数
  • send(实参) 可以给generator发送数据,实现外部控制内部
  • 对象名.send(None) 等价于 next(对象名), 对象名.__next__();所以send()是核心
  • 代码测试:

    def gen(times):
    n=0
    while n<times:
    temp = yield n*2
    print("temp = ", temp)
    n=n+1
    return "done"

    g = gen(5) #5次循环,5个元素
    g.send(None) # 等价于next(g),启动generator,以后默认都会
    g.send(666) #发送了666给temp
    print(' ')
    for x in g: #现在g里面还能生产3个元素
    print("x = ", x)

免责声明:文章转载自《34-高级特性之generator(2)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nodejs面试题C#进行Visio二次开发之Visio模具制作(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

各种VBA excel 命令、属性、方法

本示例为设置密码窗口 (1)If Application.InputBox("请输入密码:") = 1234 Then        [A1] = 1 '密码正确时执行Else      MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码End If'本示例为设置密码窗口 (1)X = MsgBox("是否真的要结帐?", vbYesNo)...

POJ 3028 Shoot-out(概率DP)

Description This is back in the Wild West where everybody is fighting everybody. In particular, there are n cowboys, each with a revolver. These are rather civilized cowboys, so...

C语言单链表实现19个功能完全详解

 * list.c//#include "stdafx.h"#include "stdio.h"#include <stdlib.h>#include "string.h"typedef int elemType ;/****************************************************************...

apache2.2安装和配置(安装版)

apache2.2安装和配置(安装版) 1.         Next→Iaccept,Next→在Network Domain下填入你的域名,在Server Name下填入你的服务器名称(也就是主机名加上域名),在Administrator's Email Address下填入系统管理员的联系电子邮件地址,选forAllUser,Next→选Custo...

ASP.NET Core 四: Web核心与项目配置,静态内容(文件传输,npm包管理器),中间件,配置(环境配置,启动配置,用户密匙)

概念说明: web核心,本质是一个集成了为Http请求服务功能的承载(Host),一个请求(request)和对应的响应(response)都由HttpContext对象表示。因此就可以在服务的Run程序中对HttpContext的对象做出相关的操作(即对request和response做操作)。 静态内容,这里是关于如何返回静态文件,如html文件,或者...

ASP.NET Core系列:中间件

1. 概述 ASP.NET Core中的中间件是嵌入到应用管道中用于处理请求和响应的一段代码。 2.使用 IApplicationBuilder 创建中间件管道 2.1 匿名函数 使用Run, Map, Use ,MapWhen等扩展方法来实现。 usingMicrosoft.AspNetCore.Builder; usingMicrosoft.AspN...