▩Dart-生成器函数
目录
- 零、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秒后输出
一、多元素同步[生成器]
- 函数体标记
sync*
, 使用yield
语句来传递值。
(▩Dart-生成器函数相关推荐
- python基础之生成器,生成器函数,列表推导式
内容梗概: 1. 生成器和生成器函数. 2. 列表推导式. 1.生成器函数1.1 生成器函数. 就是把return换成yield def gen():print("爽歪歪")yie ...
- 【Python培训基础知识】Python生成器函数
对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采用生成器推导式来解决内存不足的问题.例如,利用生成器推导 ...
- 12 生成器和生成器函数以及各种推导式
今日主要内容 1. 生成器 本质就是迭代器. 一个一个的创建对象 创建生成器的方式: 1. 生成器函数 2. 通过生成器表达式来获取生成器 3. 类型转换(看不到) 2. 生成器函数 (重点) 生成器 ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- 生成器、生成器函数、推导式、生成器表达式
一.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创建 其实就是 ...
- 石川es6课程---13-16、generator-认识生成器函数
石川es6课程---13-16.generator-认识生成器函数 一.总结 一句话总结: ` generator函数,中间可以停,到哪停呢,用 yield 配合,交出执行权 ` 需要调用next() ...
- python生成器函数_【python】生成器和生成器函数
1.生成器函数: 普通函数: def func(): print("周杰伦") return "昆凌" func() #执行func()函数,"周杰伦 ...
- day19 生成器函数
生成器总结: 语法上和函数类似:生成器函数和常规函数几乎是一样的.它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值. 自动实现迭代 ...
- python3精要(31)-生成器函数yield
1.生成器函数和常规函数一样,使用def定义. 2.生成器函数包括yield,也可能包括return. 3.生成器函数创建时,自动实现迭代协议. 4.生成器函数与常规函数不同,返回值,并不退出函数,而 ...
- 如何用python生成软件_python中的生成器函数是如何工作的?
1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...
最新文章
- android监听输入框光标,EditText光标的移动
- 回调函数与Delphi的事件模型
- oracle00312,oracle 启动 报ORA-16014 和 ORA-00312
- 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
- 人工智能:看似很美,却暗藏泡沫
- Gradle学习网站
- antlr 教程_ANTLR教程– Hello Word
- 利用Layer组件弹出多个对话框(非嵌套)与关闭及刷新
- 50-20-200-配置-checkpoint配置
- MySQL单表删除重复列SQL语句
- 2d头发_3D打印毛囊突破性进展!“头发工厂”将成秃顶的救星
- python工作目录_python获取当前工作目录
- redis 设置不过期_面试时 Redis 内存淘汰总被问,但是总答不好,怎么解决?
- 用R和BioConductor进行基因芯片数据分析(三):计算median
- 【图像加密】基于matlab GUI彩色图像加密解密(带面板)【含Matlab源码 1231期】
- linux内核类型lagency,使用u盘安装linux(manjaro)时Grub报错
- win7 IE11浏览器怎么改成中文
- tl wn322g linux驱动下载,tplink wn322g+驱动官方下载
- Vue 从零开始搭建PC端项目完整框架(附GitHub地址和Vue项目执行流程)
- 前端获取本地ip和外网ip
热门文章
- IPtable之SNAT与DNAT
- yolo v4 weights 权重
- LinuxRaid的基本知识点
- Reactor模式简单实现与理解
- 树与二叉树——有关n叉树的若干问题
- localhost: mv: 无法获取“/opt/module/hadoop-3.1.3/logs/hadoop-atguigu-datanode-hadoop102.out.3“ 的文件状态(sta
- Apache RocketMQ QuickStart
- Mask Scoring R-CNN
- 【STM32F4系列】【HAL库】【自制库】WS2812(软件部分)(PWM+DMA)
- 欧几里得算法及扩展欧几里得
- python基础之生成器,生成器函数,列表推导式