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 ,
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 ,
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 ,
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 {
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 ]
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 ,
298385 "cell_type" : " markdown" ,
299386 "metadata" : {},
300387 "source" : [
301- " ## 5. 练习题答案"
388+ " ## 5. 练习题答案\n " ,
389+ " \n " ,
390+ " 以下部分展示了前面练习题的参考答案,通过这些代码可以帮助理解各个语法点的实际应用。"
302391 ]
303392 },
304393 {
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 ,
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 ,
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 ,
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 ,
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 ]
426556 },
427557 "nbformat" : 4 ,
428558 "nbformat_minor" : 4
429- }
559+ }
560+
0 commit comments