function*和yield的简单理解和基本使用

介绍

function* 这种声明方式(function关键字后跟一个星号)会定义一个生成器函数 (generator function),它返回一个  Generator  对象。

一般地,生成器函数是这么使用的:

function* generator(i) {
    let a=  yield i;
    yield i+ 10;
}

var gen = generator(10);

console.log(gen.next().value);
// expected output: 10

console.log(gen.next().value);
// expected output: 20

其实这种生成器函数,可以把它理解成一种特殊的函数。

核心总结

  • 一般function* name(){}要和yield配合使用 
  • 这种函数的函数体一般不会立即执行,它需要通过返回的generator对象使用next(),来执行
  • 每当执行一次next(),生成器函数内的代码就会执行到下一个yield所在行,当执行下一次next()时,就会继续执行到下一个yield所在行。
  • 这个Generator对象包含一个value和一个done,value代表对应yield右边的值,done是布尔值代表是否执行结束
  • 其实next()也可以传递一个参数如next(30),代表运行此行代码时,会先更改上一行代码的yield左边的值a,然后再继续运行
  • 如果你看到某个生成器函数里是yeild*而不是yeild,那么它的右边一般是另一个生成器函数,意味着将原函数的执行权移交给另一个生成器函数。 
  • 如果生成器函数里使用了return显式返回,那么代码就运行到return处不会再往下运行,此事done变成false。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`return` 和 `yield` 是 Python 中两个常用的关键字,它们在使用时有一些区别。 1. `return` 是用于结束函数并返回一个值,而 `yield` 则是用于生成器函数中,可以暂停函数执行并保存函数状态,以便下次从该状态恢复执行。 2. `return` 只能返回一个值,而 `yield` 可以返回多个值,每次返回值后会暂停函数执行。 下面是两个关键字的详细使用场景和举例: #### return `return` 通常用于函数中,在执行到 `return` 语句时,函数会立即停止执行并返回一个值。下面是简单的例子: ```python def add(x, y): return x + y result = add(2, 3) print(result) # 输出 5 ``` 在上面的例子中,函数 `add()` 接收两个参数 `x` 和 `y`,并返回它们的和。当调用 `add(2, 3)` 时,`return x + y` 语句会计算出 5 并将其返回给调用者。 #### yield `yield` 通常用于生成器函数中,它的作用是将一个函数转换为生成器生成器是一种特殊的迭代器,可以按需生成值,而不是一次性生成所有值。下面是一个简单的例子: ```python def my_generator(): yield 1 yield 2 yield 3 gen = my_generator() print(next(gen)) # 输出 1 print(next(gen)) # 输出 2 print(next(gen)) # 输出 3 ``` 在上面的例子中,函数 `my_generator()` 使用了 `yield` 关键字来生成值。当调用 `next(gen)` 时,函数会从上次暂停的位置继续执行,并返回 `yield` 语句后面的值。每次调用 `next(gen)` 都会从上次暂停的位置开始执行,直到函数执行完毕或者遇到新的 `yield` 语句。 总之,`return` 和 `yield` 在 Python 中用于不同的场景。`return` 主要用于函数中返回一个值,而 `yield` 主要用于生成器函数中按需生成值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值