- 61
- 0
一个Javascript的生成器函数是这样的:
function *gen(n) {
for (let i = 0; i < n; i++) {
yield i;
}
}
[...gen(10)]
// <- (10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Javascript在声明的时候要多加一个星号。如果不加星号,会报SyntaxError。
一个python的生成器函数是这样的:
def gen(n):
for i in range(n):
yield i
>>> list(gen(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python在声明的时候不需要额外标识。直接用yield就行了。
两个语言都用了yield关键词,工作原理也几乎相同,甚至可以说Javascript就是抄的python。那为什么Javascript反而要多加一个星号呢?这个星号有什么意义?为什么要这样设计?是Javascipt太特殊,还是python太特殊?
我相信这应该是有原因的,毕竟ES2015的制定过程相当和谐(字面意义上的)
- 共 0 条
- 全部回答
-
烟敛寒林 普通会员 1楼
在JavaScript中,生成器函数使用
function *() {...}来定义,其中*()表示生成器函数,可以理解为一个无限递归调用,直到最后返回一个值。在JavaScript中,生成器函数的创建方式是通过使用new关键字,语法如下:javascript var gen = new GeneratorFunction();在Python中,生成器函数的创建方式也使用
new关键字,语法如下:python def GeneratorFunction(): # 在这里定义函数的代码 pass生成器函数在Python中的使用方式和JavaScript类似,但还有一些不同之处:
- 定义和创建方式:
- 在Python中,使用
Generator关键字定义一个生成器函数。Generator关键字的含义是“生成器”,后面跟一个星号*,表示函数是一个生成器函数。 -
在JavaScript中,直接使用
function *() {...}定义生成器函数,不需要使用new关键字。*()是一个普通函数,直接返回一个值。 -
定义生成器函数的特征:
- 在Python中,生成器函数有一个特殊特性,即可以使用
yield关键字声明生成器函数的状态,这样在函数内部可以创建一个列表、迭代器或其他数据结构,并返回一个迭代器对象,表示当前生成器函数的状态。 -
在JavaScript中,生成器函数内部可以使用
yield关键字声明生成器函数的状态,但没有Python中那么直观和直观,生成器函数需要额外的注释和关键字yield来实现这一点。 -
性能:
- 在Python中,由于生成器函数是在生成器表达式中声明的,而不是在控制台中调用的,所以它的性能通常优于传统的循环语句,因为生成器函数不会在执行过程中阻塞,可以频繁地在内存中创建和销毁值,提高了并发处理性能。
-
在JavaScript中,由于需要使用
new关键字创建生成器函数,生成器函数的创建和使用都需要额外的时间和空间,因此在处理大量数据或高并发环境下,JavaScript的生成器函数可能会比Python的生成器函数慢。 -
函数返回值:
- 在Python中,生成器函数通常只有一个固定返回值,通常是
None。这是因为Python的内建函数没有返回值(包括yield语句返回的值),而生成器函数在执行过程中可以返回一个值。 - 在JavaScript中,生成器函数通常返回一个迭代器对象,可以是
null或一个Promise对象,取决于生成器函数的类型和返回值的实现。
总的来说,虽然在Python和JavaScript中都可以使用
Generator关键字定义生成器函数,但Python的生成器函数具有更清晰的定义方式、更好的性能、固定的返回值类型和可迭代的返回值对象,这些使得Python的生成器函数在一些场景下具有更好的使用体验和性能。在实际开发中,应根据具体需求和环境选择使用哪种语言和方式定义和使用生成器函数。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
