Generator函数
1.为什么要用它?
要用一种工具,它必须有它的价值,首先说一说它的特点。函数的类型目前有四种:普通函数、箭头函数、异步函数、还有Generator函数。Generator的作用是,改善回调地狱,将异步嵌套写成同步写法。
(1)函数定义上的区别:
Generator函数是一个普通的函数,但是他也有自己的特点:1)在function关键字和函数名之间有一个*(星号)号,这个星号可以跟在function右上角,也可以跟在函数名左上角,都可以;2)内部使用yield关键字,用来chn内部不同的状态产出。
(2)返回值的区别:
Generator是一个普通函数,调用也是在后面加圆括号,但是与普通函数比,区别在于,普通函数会立即执行并产出一个结果,但是Generator不是,它一定会返回一个对象,一个指针对象,也就是iterator Object.要想指针往下移动,需要调用next()方法,函数中的yield相当于暂停,遇到下一个yield或者return就会暂停,使用next可恢复执行,调用next方法,当流程尚未结束时,会返回一个对象,这个对象的value值,就时yield表达式的值,如果结束了,就会返回undefined
(3)yield表达式
yiled表达式最后会产生一个对象,对象包含两个属性,value和done,value的值就是yield表达式返回的值,done表示是否执行结束
(4)yield语句会返回一个值,且只有用next方法,指针才会向下移动,相当于惰性求值,yield关键字和return的区别在于:
1)求值时机:return 会在函数调用后立即执行,而yield会在使用next方法后才执行
2)返回次数和记忆功能:return 不具备记忆功能,而yield表达式会在使用next后从上次暂停的位置开始向下接着执行,并且可以多次返回状态值
(5) generator函数也可以不用yield表达式,这样函数就变成了一个简单的暂缓执行函数,但是,yield表达式却只能用在generator当中,用在其他地方会报错,另外,yield表达式放在表达式中时,必须放在括号内,否则会报语法错误。
(6) next方法的参数:next方法的参数是上一次yield产生的结果,因此,可以根据next的参数去改变函数的状态,在第一次使用next方法时,传入的参数会被忽略,默认无效,第一次使用next方法实际上是启动遍历器,可以不用带参数。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
好程序员分享java8新特性之Lambda表达式
好程序员分享java8新特性之Lambda表达式 ⼀、Lambda表达式简介 什么是Lambda? Lambda表达式是Java 8推出的⼀个新特性。从本质上讲,Lambda表达式是⼀个匿名函数。 为什么要使⽤Lambda? 使⽤Lambda表达式可以对⼀个接⼝进⾏⾮常简洁的实现。 之前我们在给⼀个接⼝引⽤赋值的时候,可以使⽤接⼝实现类,或者匿名内部类。但是有了 Lambda表达式,我们可以更加⽅便的实现这个需求。 interface Comparator{ int compare(T o1, T o2); } class Program{ public static void main(String[] args) { // 1. 使⽤接⼝实现类实现 class Impl implements Comparator{ @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } } Comparator c1 = new Impl(); // 2. 使⽤匿名内部类实现 Comparator c2 = ...
-
下一篇
通过命令行参数发送阿里云短信 - python
阿里云的“消息服务”产品文档中,提供了python的演示例子。简单替换例子文件中的 REGION 等参数就可以运行,成功发出手机短信了。但每次发送不同内容的短信,大概流程是:打开文件,替换短信内容,保存文件,运行python文件,发出短信。如果短信内容中是固定的几个变量,能否通过参数传入到命令行发送呢? 如果您还没有订购阿里云的产品,可点此链接查看优惠价格喔。 过程: 1.修改 demo_sms_send.py 文件内容,在前边添加以下参数设定: vserver_ip = sys.argv[1] vserver_expire_time = sys.argv[2] vclient_phone = sys.argv[3] 2.将设定的参数填写到发送语句中,如: params = {"server_ip":vserver_ip,"server_expire_time":vserver_expire_time} print(send_sms(__business_id, vclient_phone, "安群", "SMS_152505789", params)) 3.在命令行中,执行如 pyt...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL数据库在高并发下的优化方案
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8编译安装MySQL8.0.19