Skip to content

Commit

Permalink
fix typo
Browse files Browse the repository at this point in the history
  • Loading branch information
satori1995 committed Dec 30, 2024
1 parent b931f4c commit 84ed401
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ except StopIteration as e:

生成器永远在 yield 处暂停,并将 yield 后面的值返回。如果想驱动生成器继续执行,可以调用 \_\_next\_\_ 或 send,会去寻找下一个 yield,然后在下一个 yield 处暂停。依次往复,直到找不到 yield 时,抛出 StopIteration,并将返回值包在里面。

但是这两者的不同之处在于,send 可以接收参数,假设生成器在 <font color="blue">res = yield 123</font> 这里停下来了。当调用 \_\_next\_\_ 和 send 的时候,都可以驱动执行,但调用 send 时可以传递一个 value,并将 value 赋值给变量 res。而 \_\_next\_ 没有这个功能,如果是调用 \_\_next\_ 的话,那么 res 得到的就是一个 None。
但是这两者的不同之处在于,send 可以接收参数,假设生成器在 <font color="blue">res = yield 123</font> 这里停下来了。当调用 \_\_next\_\_ 和 send 的时候,都可以驱动执行,但调用 send 时可以传递一个 value,并将 value 赋值给变量 res。而 \_\_next\_\_ 没有这个功能,如果是调用 \_\_next\_\_ 的话,那么 res 得到的就是一个 None。

所以 res = yield 123 这一行语句需要两次驱动生成器才能完成,第一次驱动会让生成器执行到 yield 123,然后暂停执行,将 123 返回。第二次驱动才会给变量 res 赋值,此时会寻找下一个 yield 然后暂停。

Expand Down Expand Up @@ -691,7 +691,7 @@ print(
g = (巭孬嫑夯烎 for x in [1, 2, 3])
~~~

执行这段代码不会报错,尽管 for 前面那一坨我们没有定义,但不要紧,因为生成器是惰性执行的。可如果我们又调用了 g.\_\_next\_\_(),那么很明显就会报错了,会抛出 NameError。
执行这段代码不会报错,尽管 for 前面那一坨没有定义,但不要紧,因为生成器是惰性执行的。可如果我们又调用了 g.\_\_next\_\_(),那么很明显就会报错了,会抛出 NameError。

```
g = (x for x in lst)
Expand Down Expand Up @@ -728,7 +728,7 @@ for i in [1, 10]:
print(tuple(g))
```

思考一下,上面代码会打印啥?下面进行分析:
思考一下,上面这段代码会打印啥?来分析一下。

- 初始的 g,可以看成是 (1, 2, 3, 4),因为 in 后面是啥,在创建生成器的时候就确定了;
- 第一次循环之后,g 就相当于 (1+i, 2+i, 3+i, 4+i);
Expand Down
2 changes: 1 addition & 1 deletion src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,4 @@
+ [69. 函数是如何解析关键字参数的?](69.函数是如何解析关键字参数的?.md)
+ [70. 扩展位置参数和扩展关键字参数是如何解析的?](70.扩展位置参数和扩展关键字参数是如何解析的?.md)
+ [71. 闭包是怎么实现的?](71.闭包是怎么实现的?.md)
+ [72. 生成器是怎么实现的](72.生成器是怎么实现的?.md)
+ [72. 生成器是做什么的,为什么会有生成器](72.生成器是做什么的,为什么会有生成器?.md)

0 comments on commit 84ed401

Please sign in to comment.