大家好今天我们来深入学习 Python 中函数的高级特性和异常处理机制。这篇文章将涵盖函数说明文档、嵌套调用、作用域、多种传参方式、匿名函数以及异常捕获等核心知识点。 目录一、函数进阶1.1 函数说明文档1.2 函数的嵌套调用1.3 变量的作用域1.4 函数多返回值1.5 函数多种传参方式1.6 匿名函数lambda二、异常处理2.1 了解异常2.2 异常的捕获方法三、总结一、函数进阶1.1 函数说明文档在 Python 中函数说明文档即文档字符串就是写在函数定义内部第一行、用三个引号括起来的注释性文字。它的作用是向使用者清晰地说明这个函数是干什么的、怎么用。简单理解函数说明文档就是函数的使用说明书。基础语法def func(x, y): 函数说明 :param x: 形参 x 的说明 :param y: 形参 y 的说明 :return: 返回值的说明 return x y示例代码def add(x, y): 两数相加 :param x: 相加的数字1 :param y: 相加的数字2 :return: 返回相加的结果 return x y # 调用函数 result add(3, 5) print(result) # 输出: 8查看函数说明文档在 PyCharm 等 IDE 中编写代码时可以通过鼠标悬停查看调用函数的说明文档。# 鼠标悬停在 add 函数上即可看到说明文档 add(10, 20) 最佳实践使用三引号编写文档字符串说明函数的功能、参数含义和返回值遵循param和return的规范格式IDE 会识别并显示这些文档信息1.2 函数的嵌套调用所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。pythondef func_b(): print(---2---) def func_a(): print(---1---) func_b() # 在 func_a 中调用 func_b print(---3---) # 调用函数 func_a func_a()运行结果---1--- ---2--- ---3---执行流程图调用 func_a() ↓ 执行 print(---1---) ↓ 调用 func_b() ↓ 执行 print(---2---) ↓ 返回 func_a() ↓ 执行 print(---3---) ↓ 结束嵌套调用的应用场景将复杂功能拆分成多个小函数代码复用避免重复编写提高代码的可读性和可维护性1.3 变量的作用域变量作用域指的是变量的作用范围变量在哪里可用在哪里不可用。主要分为两类局部变量和全局变量。局部变量所谓局部变量是定义在函数体内部的变量即只在函数体内部生效。def test_a(): num 100 # 局部变量 print(num) test_a() # 输出: 100 # print(num) # ❌ 报错: NameError: name num is not defined局部变量的特点在函数体内部临时保存数据当函数调用完成后局部变量被销毁函数外部无法访问全局变量所谓全局变量指的是在函数体内、外都能生效的变量。# 定义全局变量 num 100 def test_a(): print(num) # 访问全局变量 def test_b(): print(num) # 访问全局变量 test_a() # 输出: 100 test_b() # 输出: 100global 关键字如果在函数内部需要修改全局变量需要使用global关键字声明。pythonnum 100 def test_a(): print(num) # 访问全局变量 def test_b(): # ❌ 错误写法这会在函数内创建一个新的局部变量 # num 200 # print(num) # 输出: 200但全局变量没有被修改 # ✅ 正确写法使用 global 关键字声明 global num num 200 # 修改全局变量 print(num) test_a() # 输出: 100 test_b() # 输出: 200 print(f全局变量 num {num}) # 输出: 全局变量 num 200变量作用域总结变量类型定义位置作用范围关键字局部变量函数内部仅函数内部有效无全局变量函数外部整个文件有效global修改时使用1.4 函数多返回值函数多返回值顾名思义就是一个函数在执行完毕后可以同时返回多个结果而不是只能返回一个。def test_return(): return 1, 2 # 返回多个值 # 使用多个变量接收返回值 x, y test_return() print(x) # 输出: 1 print(y) # 输出: 2多返回值的特性按照返回值的顺序用对应顺序的多个变量接收变量之间用逗号隔开支持不同类型的数据同时返回def get_user_info(): return 小明, 18, 175.5, True name, age, height, is_student get_user_info() print(f姓名: {name}, 年龄: {age}, 身高: {height}, 是否学生: {is_student}) # 输出: 姓名: 小明, 年龄: 18, 身高: 175.5, 是否学生: True多返回值的本质实际上Python 会将多个返回值打包成一个元组tupledef test_return(): return 1, 2, 3 result test_return() print(result) # 输出: (1, 2, 3) print(type(result)) # 输出: class tuple1.5 函数多种传参方式在 Python 中函数有多种传参方式包括位置参数、关键字参数、缺省参数、不定长参数。位置参数调用函数时根据函数定义的参数位置来传递参数。def user_info(name, age, gender): print(f您的名字是 {name}, 年龄是 {age}, 性别是 {gender}) # 位置传参必须按照顺序和个数一致 user_info(TOM, 20, 男) # 正确 ✅ # user_info(TOM, 20) # ❌ 缺少参数 # user_info(TOM, 20, 男, 身高) # ❌ 参数过多关键字参数函数调用时通过keyvalue形式传递参数可以清除参数的顺序需求。def user_info(name, age, gender): print(f您的名字是 {name}, 年龄是 {age}, 性别是 {gender}) # 关键字传参可以不按照顺序 user_info(name小明, age20, gender男) user_info(age20, gender男, name小明) # ✅ 顺序可以打乱 # 位置参数和关键字参数可以混用 # 注意位置参数必须在关键字参数的前面 user_info(小明, age20, gender男) # ✅ # user_info(name小明, 20, 男) # ❌ 位置参数在关键字参数之后缺省默认值参数缺省参数也叫默认参数用于定义函数时为参数提供默认值。def user_info(name, age, gender男): print(f您的名字是 {name}, 年龄是 {age}, 性别是 {gender}) # 不传递默认参数使用默认值 user_info(TOM, 20) # 输出: 您的名字是 TOM, 年龄是 20, 性别是 男 # 传递默认参数覆盖默认值 user_info(ROSE, 18, 女) # 输出: 您的名字是 ROSE, 年龄是 18, 性别是 女⚠️ 注意事项所有位置参数必须出现在默认参数前包括函数定义和调用函数调用时如果为缺省参数传值则修改默认参数值如果不传递则使用默认值# ✅ 正确默认参数在最后 def func(a, b, c10): pass # ❌ 错误默认参数不能在位置参数之前 # def func(a10, b, c): # pass不定长参数位置传递*args使用*args可以接收任意数量的位置参数这些参数会被打包成一个元组tuple。def user_info(*args): print(args) # args 是一个元组 user_info(TOM) # 输出: (TOM,) user_info(TOM, 18) # 输出: (TOM, 18) user_info(TOM, 18, 175) # 输出: (TOM, 18, 175)关键字传递**kwargs使用**kwargs可以接收任意数量的关键字参数这些参数会被打包成一个字典dict。def user_info(**kwargs): print(kwargs) # kwargs 是一个字典 user_info(nameTOM, age18, id110) # 输出: {name: TOM, age: 18, id: 110}组合使用def user_info(name, *args, **kwargs): print(f姓名: {name}) print(f其他位置参数: {args}) print(f其他关键字参数: {kwargs}) user_info(TOM, 18, 男, height175, weight65) # 输出: # 姓名: TOM # 其他位置参数: (18, 男) # 其他关键字参数: {height: 175, weight: 65}传参方式总结方式定义语法调用语法特点位置参数def f(a, b)f(1, 2)按顺序传递必须一致关键字参数def f(a, b)f(a1, b2)顺序任意清晰明确缺省参数def f(a, b10)f(1)提供默认值不定长参数def f(*args)f(1, 2, 3)接收任意数量位置参数关键字不定长def f(**kwargs)f(a1, b2)接收任意数量关键字参数1.6 匿名函数lambda在 Python 中匿名函数就是没有名字的函数用关键字lambda来定义。因为它不需要用def给函数起名所以也叫lambda 函数。简单理解匿名函数就是一行代码就能写完的小工具函数用完即扔不需要给它起个正式的名字。lambda 表达式语法lambda 形参1, 形参2, ... : 单行表达式或函数调用注意点匿名函数中不能使用 while 循环、for 循环只能编写单行的表达式或函数调用返回结果不需要使用return表达式的运行结果就是返回结果匿名函数中也可以不返回结果例如lambda: print(Hello World)基本示例# 普通函数 def func_sum(a, b): return a b # lambda 表达式 func lambda a, b: a b result func(2, 3) print(result) # 输出: 5lambda 的应用场景1. 作为参数传递配合内置函数# 使用 lambda 作为排序规则 students [ {name: 张三, age: 20}, {name: 李四, age: 18}, {name: 王五, age: 22} ] # 按年龄排序 students.sort(keylambda x: x[age]) print(students) # 输出: [{name: 李四, age: 18}, {name: 张三, age: 20}, {name: 王五, age: 22}]2. 配合map()函数numbers [1, 2, 3, 4, 5] squared list(map(lambda x: x ** 2, numbers)) print(squared) # 输出: [1, 4, 9, 16, 25]3. 配合filter()函数numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_numbers list(filter(lambda x: x % 2 0, numbers)) print(even_numbers) # 输出: [2, 4, 6, 8, 10]4. 配合reduce()函数from functools import reduce numbers [1, 2, 3, 4, 5] product reduce(lambda x, y: x * y, numbers) print(product) # 输出: 120lambda 的局限性特性lambdadef 函数只能单行表达式✅❌支持多行语句❌✅支持循环❌✅支持条件判断✅用三元表达式✅支持异常处理❌✅有函数名❌✅# ✅ lambda 可以做的 lambda x: x 10 lambda x, y: x y lambda x: x if x 0 else -x # ❌ lambda 不能做的 # lambda x: if x 0: return x else: return -x # 语法错误 # lambda x: for i in range(x): print(i) # 语法错误 # lambda x: try: x/0 except: pass # 语法错误二、异常处理2.1 了解异常当检测到一个错误时Python 解释器就无法继续执行了反而出现了一些错误的提示这就是所谓的异常也就是我们常说的BUG。# 这段代码会引发异常 print(1 / 0) # ZeroDivisionError: division by zero当程序遇到 BUG 时会有两种情况整个程序因一个 BUG 停止运行对 BUG 进行提醒整个程序继续运行显然我们更希望达到第二种情况——程序不会因为一个小错误而完全崩溃。这时我们就需要使用异常捕获。2.2 异常的捕获方法基本语法try: # 可能发生异常的代码 print(name) # name 未定义 except Exception as e: # 发生异常时执行的代码 print(f异常信息: {e}) print(程序继续执行...) # ✅ 这行代码会执行运行结果异常信息: name name is not defined 程序继续执行...捕获指定异常try: # 可能发生异常的代码 num int(input(请输入数字: )) result 100 / num except ZeroDivisionError: print(除数不能为 0) except ValueError: print(请输入有效的数字) except Exception as e: print(f其他异常: {e})异常 elseelse表示的是没有异常时要执行的代码。try: print(开始执行...) num int(input(请输入数字: )) result 100 / num except ZeroDivisionError: print(除数不能为 0) except ValueError: print(请输入有效的数字) else: print(没有异常真开心) print(f计算结果: {result})异常的 finallyfinally表示的是无论是否异常都要执行的代码例如关闭文件。try: f open(test.txt, r) content f.read() print(content) except Exception as e: print(f发生异常: {e}) else: print(没有异常读取成功) finally: print(无论是否异常都会执行 finally) f.close() # 确保文件被关闭捕获所有异常try: # 可能出错的代码 print(name) except Exception as e: # 捕获所有异常 print(f程序出错了: {e}) print(但程序不会崩溃继续执行...) print(程序结束)异常捕获的完整结构try: # 尝试执行的代码 pass except 异常类型1: # 发生特定异常时执行 pass except 异常类型2: # 发生另一种异常时执行 pass except Exception as e: # 捕获所有其他异常 print(f未知错误: {e}) else: # 没有异常时执行 pass finally: # 无论是否异常都会执行 pass三、总结函数进阶要点概念说明关键字函数说明文档函数的使用说明书docstring嵌套调用函数内部调用其他函数无局部变量函数内定义仅函数内有效无全局变量函数外定义全局有效global多返回值返回多个值return a, b, c位置参数按位置传递无关键字参数按名称传递keyvalue缺省参数提供默认值def f(a, b10)不定长参数接收任意参数*args,**kwargs匿名函数没有名字的函数lambda异常处理要点关键字说明try尝试执行代码块except捕获并处理异常else无异常时执行finally无论是否异常都执行raise主动抛出异常 最佳实践异常具体化尽量捕获具体的异常类型而不是直接使用Exception及时释放资源在finally中释放文件、数据库连接等资源不要忽略异常捕获异常后应记录日志或做适当处理lambda 保持简单复杂的逻辑用普通函数简单的用 lambda合理使用默认参数可以减少调用时的参数传递最后提醒函数进阶和异常处理是 Python 编程中非常重要的内容掌握好这些知识你就能写出更加健壮、优雅的代码。多敲代码、多实践自然就能熟练运用如果觉得有帮助欢迎点赞、收藏、评论
Python 函数进阶与异常处理完全指南
大家好今天我们来深入学习 Python 中函数的高级特性和异常处理机制。这篇文章将涵盖函数说明文档、嵌套调用、作用域、多种传参方式、匿名函数以及异常捕获等核心知识点。 目录一、函数进阶1.1 函数说明文档1.2 函数的嵌套调用1.3 变量的作用域1.4 函数多返回值1.5 函数多种传参方式1.6 匿名函数lambda二、异常处理2.1 了解异常2.2 异常的捕获方法三、总结一、函数进阶1.1 函数说明文档在 Python 中函数说明文档即文档字符串就是写在函数定义内部第一行、用三个引号括起来的注释性文字。它的作用是向使用者清晰地说明这个函数是干什么的、怎么用。简单理解函数说明文档就是函数的使用说明书。基础语法def func(x, y): 函数说明 :param x: 形参 x 的说明 :param y: 形参 y 的说明 :return: 返回值的说明 return x y示例代码def add(x, y): 两数相加 :param x: 相加的数字1 :param y: 相加的数字2 :return: 返回相加的结果 return x y # 调用函数 result add(3, 5) print(result) # 输出: 8查看函数说明文档在 PyCharm 等 IDE 中编写代码时可以通过鼠标悬停查看调用函数的说明文档。# 鼠标悬停在 add 函数上即可看到说明文档 add(10, 20) 最佳实践使用三引号编写文档字符串说明函数的功能、参数含义和返回值遵循param和return的规范格式IDE 会识别并显示这些文档信息1.2 函数的嵌套调用所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。pythondef func_b(): print(---2---) def func_a(): print(---1---) func_b() # 在 func_a 中调用 func_b print(---3---) # 调用函数 func_a func_a()运行结果---1--- ---2--- ---3---执行流程图调用 func_a() ↓ 执行 print(---1---) ↓ 调用 func_b() ↓ 执行 print(---2---) ↓ 返回 func_a() ↓ 执行 print(---3---) ↓ 结束嵌套调用的应用场景将复杂功能拆分成多个小函数代码复用避免重复编写提高代码的可读性和可维护性1.3 变量的作用域变量作用域指的是变量的作用范围变量在哪里可用在哪里不可用。主要分为两类局部变量和全局变量。局部变量所谓局部变量是定义在函数体内部的变量即只在函数体内部生效。def test_a(): num 100 # 局部变量 print(num) test_a() # 输出: 100 # print(num) # ❌ 报错: NameError: name num is not defined局部变量的特点在函数体内部临时保存数据当函数调用完成后局部变量被销毁函数外部无法访问全局变量所谓全局变量指的是在函数体内、外都能生效的变量。# 定义全局变量 num 100 def test_a(): print(num) # 访问全局变量 def test_b(): print(num) # 访问全局变量 test_a() # 输出: 100 test_b() # 输出: 100global 关键字如果在函数内部需要修改全局变量需要使用global关键字声明。pythonnum 100 def test_a(): print(num) # 访问全局变量 def test_b(): # ❌ 错误写法这会在函数内创建一个新的局部变量 # num 200 # print(num) # 输出: 200但全局变量没有被修改 # ✅ 正确写法使用 global 关键字声明 global num num 200 # 修改全局变量 print(num) test_a() # 输出: 100 test_b() # 输出: 200 print(f全局变量 num {num}) # 输出: 全局变量 num 200变量作用域总结变量类型定义位置作用范围关键字局部变量函数内部仅函数内部有效无全局变量函数外部整个文件有效global修改时使用1.4 函数多返回值函数多返回值顾名思义就是一个函数在执行完毕后可以同时返回多个结果而不是只能返回一个。def test_return(): return 1, 2 # 返回多个值 # 使用多个变量接收返回值 x, y test_return() print(x) # 输出: 1 print(y) # 输出: 2多返回值的特性按照返回值的顺序用对应顺序的多个变量接收变量之间用逗号隔开支持不同类型的数据同时返回def get_user_info(): return 小明, 18, 175.5, True name, age, height, is_student get_user_info() print(f姓名: {name}, 年龄: {age}, 身高: {height}, 是否学生: {is_student}) # 输出: 姓名: 小明, 年龄: 18, 身高: 175.5, 是否学生: True多返回值的本质实际上Python 会将多个返回值打包成一个元组tupledef test_return(): return 1, 2, 3 result test_return() print(result) # 输出: (1, 2, 3) print(type(result)) # 输出: class tuple1.5 函数多种传参方式在 Python 中函数有多种传参方式包括位置参数、关键字参数、缺省参数、不定长参数。位置参数调用函数时根据函数定义的参数位置来传递参数。def user_info(name, age, gender): print(f您的名字是 {name}, 年龄是 {age}, 性别是 {gender}) # 位置传参必须按照顺序和个数一致 user_info(TOM, 20, 男) # 正确 ✅ # user_info(TOM, 20) # ❌ 缺少参数 # user_info(TOM, 20, 男, 身高) # ❌ 参数过多关键字参数函数调用时通过keyvalue形式传递参数可以清除参数的顺序需求。def user_info(name, age, gender): print(f您的名字是 {name}, 年龄是 {age}, 性别是 {gender}) # 关键字传参可以不按照顺序 user_info(name小明, age20, gender男) user_info(age20, gender男, name小明) # ✅ 顺序可以打乱 # 位置参数和关键字参数可以混用 # 注意位置参数必须在关键字参数的前面 user_info(小明, age20, gender男) # ✅ # user_info(name小明, 20, 男) # ❌ 位置参数在关键字参数之后缺省默认值参数缺省参数也叫默认参数用于定义函数时为参数提供默认值。def user_info(name, age, gender男): print(f您的名字是 {name}, 年龄是 {age}, 性别是 {gender}) # 不传递默认参数使用默认值 user_info(TOM, 20) # 输出: 您的名字是 TOM, 年龄是 20, 性别是 男 # 传递默认参数覆盖默认值 user_info(ROSE, 18, 女) # 输出: 您的名字是 ROSE, 年龄是 18, 性别是 女⚠️ 注意事项所有位置参数必须出现在默认参数前包括函数定义和调用函数调用时如果为缺省参数传值则修改默认参数值如果不传递则使用默认值# ✅ 正确默认参数在最后 def func(a, b, c10): pass # ❌ 错误默认参数不能在位置参数之前 # def func(a10, b, c): # pass不定长参数位置传递*args使用*args可以接收任意数量的位置参数这些参数会被打包成一个元组tuple。def user_info(*args): print(args) # args 是一个元组 user_info(TOM) # 输出: (TOM,) user_info(TOM, 18) # 输出: (TOM, 18) user_info(TOM, 18, 175) # 输出: (TOM, 18, 175)关键字传递**kwargs使用**kwargs可以接收任意数量的关键字参数这些参数会被打包成一个字典dict。def user_info(**kwargs): print(kwargs) # kwargs 是一个字典 user_info(nameTOM, age18, id110) # 输出: {name: TOM, age: 18, id: 110}组合使用def user_info(name, *args, **kwargs): print(f姓名: {name}) print(f其他位置参数: {args}) print(f其他关键字参数: {kwargs}) user_info(TOM, 18, 男, height175, weight65) # 输出: # 姓名: TOM # 其他位置参数: (18, 男) # 其他关键字参数: {height: 175, weight: 65}传参方式总结方式定义语法调用语法特点位置参数def f(a, b)f(1, 2)按顺序传递必须一致关键字参数def f(a, b)f(a1, b2)顺序任意清晰明确缺省参数def f(a, b10)f(1)提供默认值不定长参数def f(*args)f(1, 2, 3)接收任意数量位置参数关键字不定长def f(**kwargs)f(a1, b2)接收任意数量关键字参数1.6 匿名函数lambda在 Python 中匿名函数就是没有名字的函数用关键字lambda来定义。因为它不需要用def给函数起名所以也叫lambda 函数。简单理解匿名函数就是一行代码就能写完的小工具函数用完即扔不需要给它起个正式的名字。lambda 表达式语法lambda 形参1, 形参2, ... : 单行表达式或函数调用注意点匿名函数中不能使用 while 循环、for 循环只能编写单行的表达式或函数调用返回结果不需要使用return表达式的运行结果就是返回结果匿名函数中也可以不返回结果例如lambda: print(Hello World)基本示例# 普通函数 def func_sum(a, b): return a b # lambda 表达式 func lambda a, b: a b result func(2, 3) print(result) # 输出: 5lambda 的应用场景1. 作为参数传递配合内置函数# 使用 lambda 作为排序规则 students [ {name: 张三, age: 20}, {name: 李四, age: 18}, {name: 王五, age: 22} ] # 按年龄排序 students.sort(keylambda x: x[age]) print(students) # 输出: [{name: 李四, age: 18}, {name: 张三, age: 20}, {name: 王五, age: 22}]2. 配合map()函数numbers [1, 2, 3, 4, 5] squared list(map(lambda x: x ** 2, numbers)) print(squared) # 输出: [1, 4, 9, 16, 25]3. 配合filter()函数numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_numbers list(filter(lambda x: x % 2 0, numbers)) print(even_numbers) # 输出: [2, 4, 6, 8, 10]4. 配合reduce()函数from functools import reduce numbers [1, 2, 3, 4, 5] product reduce(lambda x, y: x * y, numbers) print(product) # 输出: 120lambda 的局限性特性lambdadef 函数只能单行表达式✅❌支持多行语句❌✅支持循环❌✅支持条件判断✅用三元表达式✅支持异常处理❌✅有函数名❌✅# ✅ lambda 可以做的 lambda x: x 10 lambda x, y: x y lambda x: x if x 0 else -x # ❌ lambda 不能做的 # lambda x: if x 0: return x else: return -x # 语法错误 # lambda x: for i in range(x): print(i) # 语法错误 # lambda x: try: x/0 except: pass # 语法错误二、异常处理2.1 了解异常当检测到一个错误时Python 解释器就无法继续执行了反而出现了一些错误的提示这就是所谓的异常也就是我们常说的BUG。# 这段代码会引发异常 print(1 / 0) # ZeroDivisionError: division by zero当程序遇到 BUG 时会有两种情况整个程序因一个 BUG 停止运行对 BUG 进行提醒整个程序继续运行显然我们更希望达到第二种情况——程序不会因为一个小错误而完全崩溃。这时我们就需要使用异常捕获。2.2 异常的捕获方法基本语法try: # 可能发生异常的代码 print(name) # name 未定义 except Exception as e: # 发生异常时执行的代码 print(f异常信息: {e}) print(程序继续执行...) # ✅ 这行代码会执行运行结果异常信息: name name is not defined 程序继续执行...捕获指定异常try: # 可能发生异常的代码 num int(input(请输入数字: )) result 100 / num except ZeroDivisionError: print(除数不能为 0) except ValueError: print(请输入有效的数字) except Exception as e: print(f其他异常: {e})异常 elseelse表示的是没有异常时要执行的代码。try: print(开始执行...) num int(input(请输入数字: )) result 100 / num except ZeroDivisionError: print(除数不能为 0) except ValueError: print(请输入有效的数字) else: print(没有异常真开心) print(f计算结果: {result})异常的 finallyfinally表示的是无论是否异常都要执行的代码例如关闭文件。try: f open(test.txt, r) content f.read() print(content) except Exception as e: print(f发生异常: {e}) else: print(没有异常读取成功) finally: print(无论是否异常都会执行 finally) f.close() # 确保文件被关闭捕获所有异常try: # 可能出错的代码 print(name) except Exception as e: # 捕获所有异常 print(f程序出错了: {e}) print(但程序不会崩溃继续执行...) print(程序结束)异常捕获的完整结构try: # 尝试执行的代码 pass except 异常类型1: # 发生特定异常时执行 pass except 异常类型2: # 发生另一种异常时执行 pass except Exception as e: # 捕获所有其他异常 print(f未知错误: {e}) else: # 没有异常时执行 pass finally: # 无论是否异常都会执行 pass三、总结函数进阶要点概念说明关键字函数说明文档函数的使用说明书docstring嵌套调用函数内部调用其他函数无局部变量函数内定义仅函数内有效无全局变量函数外定义全局有效global多返回值返回多个值return a, b, c位置参数按位置传递无关键字参数按名称传递keyvalue缺省参数提供默认值def f(a, b10)不定长参数接收任意参数*args,**kwargs匿名函数没有名字的函数lambda异常处理要点关键字说明try尝试执行代码块except捕获并处理异常else无异常时执行finally无论是否异常都执行raise主动抛出异常 最佳实践异常具体化尽量捕获具体的异常类型而不是直接使用Exception及时释放资源在finally中释放文件、数据库连接等资源不要忽略异常捕获异常后应记录日志或做适当处理lambda 保持简单复杂的逻辑用普通函数简单的用 lambda合理使用默认参数可以减少调用时的参数传递最后提醒函数进阶和异常处理是 Python 编程中非常重要的内容掌握好这些知识你就能写出更加健壮、优雅的代码。多敲代码、多实践自然就能熟练运用如果觉得有帮助欢迎点赞、收藏、评论