Skip to content

Commit 6d3ae53

Browse files
committed
Update chapter_2_functions_and_modules.ipynb
1 parent 8f1898e commit 6d3ae53

1 file changed

Lines changed: 145 additions & 14 deletions

File tree

chapter_2_functions_and_modules.ipynb

Lines changed: 145 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,44 @@
77
"# 函数与模块详解"
88
]
99
},
10+
{
11+
"cell_type": "markdown",
12+
"metadata": {},
13+
"source": [
14+
"### 语法详细说明\n",
15+
"本笔记涵盖了 Python 中函数定义、参数传递、Lambda 表达式、作用域、模块与包管理、闭包与装饰器等内容。下面在每个部分中,我们会详细解释相关语法和用法。"
16+
]
17+
},
1018
{
1119
"cell_type": "markdown",
1220
"metadata": {},
1321
"source": [
1422
"## 1. 函数定义与参数传递"
1523
]
1624
},
25+
{
26+
"cell_type": "markdown",
27+
"metadata": {},
28+
"source": [
29+
"在 Python 中,函数通过 `def` 关键字定义。函数名后面紧跟参数列表(用括号括起来),接着是冒号,随后缩进部分为函数体。函数通过 `return` 语句返回计算结果。如果没有 `return` 语句,函数默认返回 `None`。\n",
30+
"\n",
31+
"此外,Python 支持多种参数传递方式,如位置参数、关键字参数、默认参数和可变参数。"
32+
]
33+
},
1734
{
1835
"cell_type": "markdown",
1936
"metadata": {},
2037
"source": [
2138
"### 1.1 基本函数定义"
2239
]
2340
},
41+
{
42+
"cell_type": "markdown",
43+
"metadata": {},
44+
"source": [
45+
"在下面的示例中,我们定义了一个 `calculate_area` 函数,用于计算矩形面积。该函数接收两个参数 `width` 和 `height`,通过乘法运算计算面积并返回。"
46+
]
47+
},
2448
{
2549
"cell_type": "code",
2650
"execution_count": null,
@@ -43,6 +67,18 @@
4367
"### 1.2 参数类型"
4468
]
4569
},
70+
{
71+
"cell_type": "markdown",
72+
"metadata": {},
73+
"source": [
74+
"Python 支持多种参数传递方式:\n",
75+
"\n",
76+
"- **位置参数**:按顺序传递给函数,例如 `greet(\"Alice\", \"Hello\")`。\n",
77+
"- **关键字参数**:通过参数名传递,如 `greet(message=\"Hi\", name=\"Bob\")`,这样传递顺序可以任意。\n",
78+
"- **默认参数**:在函数定义时给参数设置默认值,例如 `def greet(name, message=\"Hello\")`,如果调用时不提供该参数,则使用默认值。\n",
79+
"- **可变参数**:使用 `*args`(或 `**kwargs` 用于关键字可变参数)收集额外的参数,如 `def sum_numbers(*args)`,函数内部可以将所有传入的额外参数当作元组处理。"
80+
]
81+
},
4682
{
4783
"cell_type": "code",
4884
"execution_count": null,
@@ -115,6 +151,26 @@
115151
"## 2. Lambda表达式与作用域"
116152
]
117153
},
154+
{
155+
"cell_type": "markdown",
156+
"metadata": {},
157+
"source": [
158+
"Lambda 表达式是一种简洁的匿名函数定义方式,其基本语法为:\n",
159+
"\n",
160+
"```python\n",
161+
"lambda 参数: 表达式\n",
162+
"```\n",
163+
"\n",
164+
"例如,`square = lambda x: x ** 2` 定义了一个计算平方的函数。\n",
165+
"\n",
166+
"关于作用域:\n",
167+
"\n",
168+
"- **全局变量**:在函数外部定义,在整个模块中可见。\n",
169+
"- **局部变量**:在函数内部定义,只在函数内部有效。\n",
170+
"\n",
171+
"当函数内部需要访问全局变量时,直接使用即可;但在函数外部无法访问局部变量。"
172+
]
173+
},
118174
{
119175
"cell_type": "code",
120176
"execution_count": null,
@@ -175,15 +231,28 @@
175231
"cell_type": "markdown",
176232
"metadata": {},
177233
"source": [
178-
"### 3.1 自定义模块\n",
179-
"1. 创建文件 `my_utils.py`:\n",
180-
"```python\n",
181-
"def celsius_to_fahrenheit(c):\n",
182-
" return c * 9/5 + 32\n",
234+
"模块与包管理使得我们可以将代码分散到不同的文件中,方便代码的重用和组织。模块就是一个 Python 文件,而包则是包含一个 `__init__.py` 文件的文件夹。\n",
183235
"\n",
184-
"def fahrenheit_to_celsius(f):\n",
185-
" return (f - 32) * 5/9\n",
186-
"```"
236+
"常用的导入方式有:\n",
237+
"\n",
238+
"- `import module_name`\n",
239+
"- `from module_name import function_name`"
240+
]
241+
},
242+
{
243+
"cell_type": "markdown",
244+
"metadata": {},
245+
"source": [
246+
"### 3.1 自定义模块"
247+
]
248+
},
249+
{
250+
"cell_type": "markdown",
251+
"metadata": {},
252+
"source": [
253+
"在自定义模块示例中,我们在文件 `my_utils.py` 中定义了两个温度转换函数。\n",
254+
"\n",
255+
"使用 `from my_utils import celsius_to_fahrenheit` 可直接导入模块中定义的函数,从而在当前脚本中调用。"
187256
]
188257
},
189258
{
@@ -202,9 +271,16 @@
202271
"cell_type": "markdown",
203272
"metadata": {},
204273
"source": [
205-
"### 3.2 第三方库安装\n",
274+
"### 3.2 第三方库安装"
275+
]
276+
},
277+
{
278+
"cell_type": "markdown",
279+
"metadata": {},
280+
"source": [
281+
"第三方库可以通过 `pip` 进行安装,例如下面的命令会安装 `requests` 库:\n",
282+
"\n",
206283
"```bash\n",
207-
"# 在终端运行\n",
208284
"pip install requests\n",
209285
"```"
210286
]
@@ -239,6 +315,17 @@
239315
"## 4. 闭包与装饰器(进阶)"
240316
]
241317
},
318+
{
319+
"cell_type": "markdown",
320+
"metadata": {},
321+
"source": [
322+
"### 闭包\n",
323+
"闭包是指一个内部函数能够记住并访问其外部函数作用域中的变量,即使外部函数已经执行完毕。闭包常用于数据隐藏和状态保持。\n",
324+
"\n",
325+
"### 装饰器\n",
326+
"装饰器是一种高级函数,用于在不修改原函数代码的情况下,为函数增加额外功能。装饰器接收一个函数作为参数,并返回一个经过包装的新函数。"
327+
]
328+
},
242329
{
243330
"cell_type": "code",
244331
"execution_count": null,
@@ -298,7 +385,9 @@
298385
"cell_type": "markdown",
299386
"metadata": {},
300387
"source": [
301-
"## 5. 练习题答案"
388+
"## 5. 练习题答案\n",
389+
"\n",
390+
"以下部分展示了前面练习题的参考答案,通过这些代码可以帮助理解各个语法点的实际应用。"
302391
]
303392
},
304393
{
@@ -308,6 +397,13 @@
308397
"### 练习1答案"
309398
]
310399
},
400+
{
401+
"cell_type": "markdown",
402+
"metadata": {},
403+
"source": [
404+
"此答案展示了如何定义一个带有默认参数的函数 `power`,用于计算 x 的 n 次方。如果不传递 n,则默认计算平方。"
405+
]
406+
},
311407
{
312408
"cell_type": "code",
313409
"execution_count": null,
@@ -328,6 +424,13 @@
328424
"### 练习2答案"
329425
]
330426
},
427+
{
428+
"cell_type": "markdown",
429+
"metadata": {},
430+
"source": [
431+
"此答案使用 Lambda 表达式定义了一个匿名函数 `is_gt_10`,用于判断一个数字是否大于 10。"
432+
]
433+
},
331434
{
332435
"cell_type": "code",
333436
"execution_count": null,
@@ -346,6 +449,13 @@
346449
"### 练习3答案"
347450
]
348451
},
452+
{
453+
"cell_type": "markdown",
454+
"metadata": {},
455+
"source": [
456+
"此答案展示了如何导入自定义模块 `geometry`,并调用其中定义的 `circle_area` 和 `circle_circumference` 函数来计算圆的面积和周长。"
457+
]
458+
},
349459
{
350460
"cell_type": "code",
351461
"execution_count": null,
@@ -366,6 +476,13 @@
366476
"### 练习4答案"
367477
]
368478
},
479+
{
480+
"cell_type": "markdown",
481+
"metadata": {},
482+
"source": [
483+
"此答案展示了如何编写一个装饰器 `start_end_decorator`,该装饰器在原函数执行前打印 `Start`,执行后打印 `End`,从而在不修改原函数代码的情况下添加额外功能。"
484+
]
485+
},
369486
{
370487
"cell_type": "code",
371488
"execution_count": null,
@@ -394,12 +511,25 @@
394511
"cell_type": "markdown",
395512
"metadata": {},
396513
"source": [
397-
"## 关键概念总结\n",
514+
"## 关键概念总结"
515+
]
516+
},
517+
{
518+
"cell_type": "markdown",
519+
"metadata": {},
520+
"source": [
521+
"下面的表格总结了本文介绍的主要概念及其语法要点,每个概念对应不同的语法和使用场景:"
522+
]
523+
},
524+
{
525+
"cell_type": "markdown",
526+
"metadata": {},
527+
"source": [
398528
"| 概念 | 说明 | 示例 |\n",
399529
"|---------------|-------------------------------|--------------------------|\n",
400530
"| 位置参数 | 按顺序传递的参数 | `func(a, b)` |\n",
401531
"| 默认参数 | 参数有默认值 | `def func(a=1)` |\n",
402-
"| Lambda | 匿名函数 | `lambda x: x+1` |\n",
532+
"| Lambda | 匿名函数,简化函数定义 | `lambda x: x+1` |\n",
403533
"| 模块导入 | 复用代码 | `import math` |\n",
404534
"| 装饰器 | 不修改原函数添加功能 | `@decorator` |"
405535
]
@@ -426,4 +556,5 @@
426556
},
427557
"nbformat": 4,
428558
"nbformat_minor": 4
429-
}
559+
}
560+

0 commit comments

Comments
 (0)