zoukankan      html  css  js  c++  java
  • phthon生成器的使用

    python生成器

    python生成器

    python生成器基于yield语句,生成器可以暂停函数并返回一个中间结果。该函数会保存执行上下文,稍后必要时可以恢复。

    def fibonacci():
    a,b=0,1
    while True:
    yield b
    a,b=b,a+b
    fib=fibonacci()
    next(fib)#输出的是b,与迭代器的使用相同,用next函数。
    #fibonacci()函数返回一个生成器对象,是特殊的迭代器,他知道如何保存执行上下文。他可以被无限次调用,每次都会生成序列的下一个元素。
    def power(values):
    for value in values:
    print("powering %s"%value)
    yield value
    def adder(values)
    for value in values:
    print("adding to %s"%value)
    if value%2==0:
    yield value+3
    else:
    yield value+2
    elements=[1,4,7,9,12,19]
    results=adder(power(elements))
    next(results)

    生成器的另一个重要的特性,就是能够利用next函数与调用的代码进行交互,yield变成一个表达式,而值可以通过名为send的新方法传递

    def psychologist():
    print("Please tell me you problem")
    while True:
    ans=(yield)
    if ans is not None:
    if ans.endswith('?'):
    print("Don't ask yourself too much questions")
    elif 'good' in ans:
    print("ahh that's good,go on")
    elif 'bad' in ans:
    print("Don't be so negative")
    free=psychologist()
    next(free)
    free.send("I feel bad")

    send的作用与next类似,但会将函数定义内部的值变成yield的返回值。使用send函数是可以改变根据客户端代码改变自身行为的

  • 相关阅读:
    springBoot(3)---目录结构,文件上传
    springBoot(2)---快速创建项目,初解jackson
    VueJs(14)---理解Vuex
    VueJs(13)---过滤器
    VueJs(12)---vue-router(导航守卫,路由元信息,获取数据)
    php多进程中的阻塞与非阻塞
    php 中的信号处理
    dede中arcurl的解析
    dede5.7 GBK 在php5.4环境下 后台编辑器无法显示文章内容
    php5.3 php-fpm 开启 关闭 重启
  • 原文地址:https://www.cnblogs.com/dcotorbool/p/8158085.html
Copyright © 2011-2022 走看看