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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19