目录

  • 零、yield与yield*关键字
  • 一、多元素同步[生成器]
  • 二、单元素异步[生成器]
  • 三、多元素异步[生成器]

当你需要延迟生成(lazily produce)一系列值时,可以考虑使用 生成器函数

类别 关键字 返回类型 搭档
多元素同步 sync* Iterable<T> yield、yield*
单元素异步 async Future<T> await
多元素异步 async* Stream<T> yield、yield* 、await

我们可以看到,sync*返回肯定是一个Iterable对象;async返回肯定是一个Future对象;async*返回肯定是一个Stream对象。

零、yield与yield*关键字

yield用于从异步或同步生成器发出值。
yield从 Iterable 或 Stream 返回值。
yield表达式的值:是下一个iter.next的参数值。

yield*(发音为:yield-each)语句。yield后面的表达式必须表示另一个(子)序列。yield所做的是将子序列的所有元素插入到当前正在构造的序列中,就好像每个元素都有一个单独的yield一样。
yield*表达式的值:是yield*后的iterable在done为true时的value值。它将调用委托给另一个生成器,在该生成器停止生成值后,它会继续生成自己的值。
yield*可用于递归调用其 Iterable 或 Stream 函数。

示例:(多元素异步,搭配yield)

Stream<int> str(int n) async* {for (var i = 1; i <= n; i++) {await Future.delayed(Duration(seconds: 1));yield i;}
}
void main() {str(3).forEach(print);
}
1 // 过1秒后输出
2 // 再过1秒后输出
3 // 再过1秒后输出

forEach()方法原型:
void forEach(void action(E element)) {
      for (E element in this) action(element);
}

示例:(多元素异步,搭配yield each)

Stream<int> str(int n) async* {if (n > 0) {  await Future.delayed(Duration(seconds: 1));yield n;yield* str(n - 1);// 递归调用}
}
void main() {str(3).forEach(print);
}
3 // 过1秒后输出
2 // 再过1秒后输出
1 // 再过1秒后输出

一、多元素同步[生成器]
  1. 函数体标记 sync*, 使用 yield 语句来传递值。

    ▩Dart-生成器函数相关推荐

    1. python基础之生成器,生成器函数,列表推导式

      内容梗概: 1. 生成器和生成器函数. 2. 列表推导式. 1.生成器函数1.1 生成器函数. 就是把return换成yield def gen():print("爽歪歪")yie ...

    2. 【Python培训基础知识】Python生成器函数

      对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采用生成器推导式来解决内存不足的问题.例如,利用生成器推导 ...

    3. 12 生成器和生成器函数以及各种推导式

      今日主要内容 1. 生成器 本质就是迭代器. 一个一个的创建对象 创建生成器的方式: 1. 生成器函数 2. 通过生成器表达式来获取生成器 3. 类型转换(看不到) 2. 生成器函数 (重点) 生成器 ...

    4. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

      1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

    5. 生成器、生成器函数、推导式、生成器表达式

      一.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创建 其实就是 ...

    6. 石川es6课程---13-16、generator-认识生成器函数

      石川es6课程---13-16.generator-认识生成器函数 一.总结 一句话总结: ` generator函数,中间可以停,到哪停呢,用 yield 配合,交出执行权 ` 需要调用next() ...

    7. python生成器函数_【python】生成器和生成器函数

      1.生成器函数: 普通函数: def func(): print("周杰伦") return "昆凌" func() #执行func()函数,"周杰伦 ...

    8. day19 生成器函数

      生成器总结: 语法上和函数类似:生成器函数和常规函数几乎是一样的.它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值. 自动实现迭代 ...

    9. python3精要(31)-生成器函数yield

      1.生成器函数和常规函数一样,使用def定义. 2.生成器函数包括yield,也可能包括return. 3.生成器函数创建时,自动实现迭代协议. 4.生成器函数与常规函数不同,返回值,并不退出函数,而 ...

    10. 如何用python生成软件_python中的生成器函数是如何工作的?

      1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...

    最新文章

    1. android监听输入框光标,EditText光标的移动
    2. 回调函数与Delphi的事件模型
    3. oracle00312,oracle 启动 报ORA-16014 和 ORA-00312
    4. 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
    5. 人工智能:看似很美,却暗藏泡沫
    6. Gradle学习网站
    7. antlr 教程_ANTLR教程– Hello Word
    8. 利用Layer组件弹出多个对话框(非嵌套)与关闭及刷新
    9. 50-20-200-配置-checkpoint配置
    10. MySQL单表删除重复列SQL语句
    11. 2d头发_3D打印毛囊突破性进展!“头发工厂”将成秃顶的救星
    12. python工作目录_python获取当前工作目录
    13. redis 设置不过期_面试时 Redis 内存淘汰总被问,但是总答不好,怎么解决?
    14. 用R和BioConductor进行基因芯片数据分析(三):计算median
    15. 【图像加密】基于matlab GUI彩色图像加密解密(带面板)【含Matlab源码 1231期】
    16. linux内核类型lagency,使用u盘安装linux(manjaro)时Grub报错
    17. win7 IE11浏览器怎么改成中文
    18. tl wn322g linux驱动下载,tplink wn322g+驱动官方下载
    19. Vue 从零开始搭建PC端项目完整框架(附GitHub地址和Vue项目执行流程)
    20. 前端获取本地ip和外网ip

    热门文章

    1. IPtable之SNAT与DNAT
    2. yolo v4 weights 权重
    3. LinuxRaid的基本知识点
    4. Reactor模式简单实现与理解
    5. 树与二叉树——有关n叉树的若干问题
    6. localhost: mv: 无法获取“/opt/module/hadoop-3.1.3/logs/hadoop-atguigu-datanode-hadoop102.out.3“ 的文件状态(sta
    7. Apache RocketMQ QuickStart
    8. Mask Scoring R-CNN
    9. 【STM32F4系列】【HAL库】【自制库】WS2812(软件部分)(PWM+DMA)
    10. 欧几里得算法及扩展欧几里得