Skip to content

Commit 443d712

Browse files
📝 更新Python文档,增强内容与示例
- 在Python文档中增加了关于`return`和`yield`的详细说明,强调两者的区别与使用场景,提升理解。 - 优化了生成器与迭代器的内容,增加了示例,增强文档的实用性与可读性。 - 更新了推导式部分,增加了条件表达式的示例,提升内容的清晰度与实用性。 - 删除了不再需要的文档,简化了项目结构,提升了文档的可维护性与清晰度。
1 parent 6883331 commit 443d712

File tree

7 files changed

+737
-926
lines changed

7 files changed

+737
-926
lines changed

docs/docs/选择编程语言/Python/10函数.mdx

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ add(2, b=3) # 5
5858

5959
return 语句用于从函数中返回值。如果函数没有 return 语句,则返回 None。
6060

61+
当执行到 return,后续的逻辑代码不再执行,直接返回。
62+
6163
```python showLineNumbers
6264
def add(a, b):
6365
return a + b
@@ -67,7 +69,25 @@ print(add(2, 3)) # 5
6769

6870
### yield
6971

70-
yield 语句用于从函数中返回一个生成器。
72+
:::info
73+
生成器让Python能够以内存高效的方式处理大量数据。它们实现了惰性求值,只在需要时计算值,体现了Python对性能和内存使用的关注。
74+
75+
```python
76+
def fibonacci():
77+
a, b = 0, 1
78+
while True:
79+
yield a
80+
a, b = b, a + b
81+
```
82+
83+
[PEP 255 – 简单生成器](https://peps.python.org/pep-0255/)
84+
:::
85+
86+
yield 是暂停的意思(它有程序中起着类似红绿灯中等红灯的作用)
87+
88+
使用了 yield 的函数被称为生成器函数(generator function),调用生成器函数会返回一个<Highlight>生成器(generator)对象</Highlight>。
89+
90+
如果要返回的数据是通过 for 等循环生成的迭代器类型数据(如列表、元组),yeild 则可以在循环内部逐个元素返回。
7191

7292
```python showLineNumbers
7393
def fibonacci(n):
@@ -77,6 +97,50 @@ def fibonacci(n):
7797
a, b = b, a + b
7898
```
7999

100+
yiled from 还可以使一个生成器可以委派子生成器,建立双向通道
101+
102+
```python showLineNumbers
103+
104+
def g1(x):
105+
yield range(x, 0, -1)
106+
yield range(x)
107+
print(list(g1(5)))
108+
#[range(5, 0, -1), range(0, 5)]
109+
110+
def g2(x):
111+
yield from range(x, 0, -1)
112+
yield from range(x)
113+
print(list(g2(5)))
114+
#[5, 4, 3, 2, 1, 0, 1, 2, 3, 4]
115+
```
116+
117+
:::tip
118+
创建生成器对象的另一个方式是使用生成器表达式。
119+
120+
121+
生成器表达式与列表推导式类似,但使用圆括号,返回生成器对象而不是列表,具有内存效率优势。
122+
123+
基本语法:
124+
125+
```python
126+
(expression for item in iterable)
127+
```
128+
129+
示例:
130+
131+
```python
132+
# 创建生成器
133+
squares_gen = (x**2 for x in range(10))
134+
print(type(squares_gen)) # <class 'generator'>
135+
136+
# 迭代生成器
137+
for square in squares_gen:
138+
print(square, end=' ') # 0 1 4 9 16 25 36 49 64 81
139+
```
140+
141+
:::
142+
143+
80144
### lambda
81145

82146
lambda 表达式用于创建匿名函数。

docs/docs/选择编程语言/Python/20类与对象.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,6 @@ print(my_clothes()) # Wearing blue clothes for the 2 time
572572
如果同时实现了 `__next__()` 方法,那它是可迭代对象的同时,也是迭代器。
573573

574574
如果只实现了 `__next__()` 方法,那它可以像手动迭代器一样工作,但是,它不是一个有效的可迭代对象。
575-
576575
```mermaid
577576
graph TD
578577
subgraph 对象
@@ -627,6 +626,7 @@ __next__
627626
"""
628627
```
629628

629+
630630
### \_\_enter\_\_\_\_exit\_\_ 与 with 语句
631631

632632
`__enter__()``__exit__()` 定义对象的上下文管理行为。

0 commit comments

Comments
 (0)