zoukankan      html  css  js  c++  java
  • 生成器函数_yield_yield from_send

    生成器函数

     1 '''
     2 yield类似于return
     3 
     4 相同:
     5    都返回出去一个值
     6 
     7 不同:
     8    yield每次返回时, 会记录当前执行的位置
     9    等下次调用生成器, 会从该位置向下走
    10 
    11    return 直接终止函数
    12 '''
    13 
    14 
    15 # 2. 生成器函数
    16 def mygen():
    17    print('one')
    18    yield 1
    19 
    20    print('two')
    21    yield 2
    22 
    23    print('three')
    24    yield 3
    25 
    26 
    27 # 创建生成器对象
    28 gen = mygen()
    29 
    30 
    31 # 使用next
    32 res = next(gen)
    33 
    34 '''
    35 首先初始化生成器, 返回一个生成器对象
    36 
    37 第一次调用: 执行print('one'), yield返回1, 
    38 暂停记录当前位置
    39 
    40 第二次调用: 执行print('two'), yield返回2,
    41 暂停记录当前位置
    42 
    43 第三次调用: 执行print('three'), yield返回3,
    44 暂停记录当前位置, 
    45 
    46 此时生成器已经不能在返回数据, 再次调用就会报错
    47 
    48 '''

    生成器写斐波那契数列?

     1 def fbnq(max_len):
     2    a = 0
     3    b = 1
     4 
     5    i = 0
     6    while i < max_len:
     7       yield b
     8       a, b = b, a + b
     9       # yield a
    10       i += 1
    11 
    12 
    13 gen = fbnq(10)
    14 for i in gen:
    15    print(i)

    send

     1 '''
     2 next和send的区别:
     3    next: 只能取值
     4    send: 能取本次yield的返回值, 
     5    也能给上次yield传入值.
     6    
     7 send注意点:
     8    第一个send不能给yield传值, 默认写None
     9    最后一个yield接收不到send的发送值
    10 '''
     1 def mygen():
     2    print('start')
     3    res = yield 1
     4    print(res)
     5 
     6    # res是send第二次的传入值, yield把2返回给send
     7    res = yield 2
     8    print(res)
     9 
    10    res = yield 3
    11    print(res)
    12 
    13 
    14 # 初始化生成器, 获得生成器对象
    15 gen = mygen()
    16 
    17 # 第一次调用, send传入None
    18 yield_res = gen.send(None)
    19 yield_res = gen.send('send1')
    20 yield_res = gen.send('send2')
    21 # 此时生成器已经没有数据, 再次调用就会报错
    22 # yield_res = gen.send('send3')
    1 # send和next可以混合使用
    2 gen = mygen()
    3 yield_res = gen.send(None)
    4 yield_res = next(gen)
    5 yield_res = next(gen)

    yield from

    把可迭代对象变成一个迭代器返回

     1 def mygen():
     2    listvar = ["鼎泰亚", "李楠", "陈根基", "陈元勇"]
     3 
     4    yield from listvar
     5 
     6 
     7 gen = mygen()
     8 
     9 for i in gen:
    10    print(i)
  • 相关阅读:
    图像控件 ImageControl
    日期条控件 DateFieldControl
    日期选择器和日期条控件 DateChooserAndDateFieldControls
    计数器控件实例 NumericStepper
    树结构控件实例 TreeControl
    vue2.0leaflet
    关于工具类中@Autowired注入为NULL的问题记录
    zabbix_agentd重装后启动时IPC和共享内存段问题
    rsync如何不指定密码文件
    MySQL5.7 JSON类型及其相关函数的学习
  • 原文地址:https://www.cnblogs.com/caihuajiaoshou/p/10618608.html
Copyright © 2011-2022 走看看