Python中函数和异常详解

Python中函数和异常详解 目录一、函数Function1.1 函数的定义与调用1.2 参数类型1.3 返回值1.4 作用域1.5 嵌套函数与闭包1.6 匿名函数lambda1.7 装饰器Decorator二、异常处理Exception Handling2.1 异常的基本结构2.2 常见内置异常2.3 抛出异常raise2.4 自定义异常2.5 else与finally的使用场景2.6 异常链与raise ... from三、函数与异常的综合应用3.1 在函数内部处理异常3.2 异常传递3.3 断言assert与异常四、总结一、函数Function1.1 函数的定义与调用函数是一段可重复使用的代码块通过def关键字定义。基本语法如下def function_name(parameters):函数体return result例如定义一个计算两数之和的函数python def add(a, b): 返回两个数的和 return a b # 调用函数 result add(3, 5) print(result) # 输出 81.2 参数类型Python函数的参数非常灵活支持多种形式1. 位置参数调用时按照位置顺序传递参数。python def greet(name, greeting): return f{greeting}, {name}! print(greet(Alice, Hello)) # Hello, Alice!2. 默认参数为参数提供默认值调用时可省略。python def greet(name, greetingHello): return f{greeting}, {name}! print(greet(Bob)) # Hello, Bob! print(greet(Bob, Hi)) # Hi, Bob!注意默认参数必须是不可变对象如None、数字、字符串、元组。3. 关键字参数调用时明确指定参数名顺序可以打乱。python print(greet(greetingHey, nameCharlie)) # Hey, Charlie!4. 可变参数*args接收任意多个位置参数打包成元组。**kwargs接收任意多个关键字参数打包成字典。python def print_args(*args, **kwargs): print(位置参数:, args) print(关键字参数:, kwargs) print_args(1, 2, 3, nameAlice, age25) # 位置参数: (1, 2, 3) # 关键字参数: {name: Alice, age: 25}5. 参数组合顺序在定义函数时参数的顺序应为位置参数 -默认参数 -*args -关键字参数 -**kwargs**。1.3 返回值函数使用return返回结果。若没有return默认返回None。return可以返回多个值实际上是一个元组。python def min_max(numbers): return min(numbers), max(numbers) min_val, max_val min_max([4, 2, 9, 1]) print(min_val, max_val) # 1 91.4 作用域Python函数有自己的作用域。在函数内部定义的变量是局部变量外部无法访问但可以访问外部全局变量。python x 10 # 全局变量 def func(): y 5 # 局部变量 print(x) # 可以访问全局变量 func() print(y) # 报错NameError: name y is not defined若要在函数内修改全局变量需使用global关键字python count 0 def increment(): global count count 1 increment() print(count) # 11.5 嵌套函数与闭包函数内部可以定义函数称为嵌套函数。内部函数可以访问外部函数的变量这种特性在闭包中非常有用。python def outer(x): def inner(y): return x y return inner add_five outer(5) print(add_five(3)) # 81.6 匿名函数lambdalambda表达式用于创建简单的单行函数语法为lambda 参数: 表达式。python square lambda x: x ** 2 print(square(4)) # 16 # 常用于高阶函数 nums [1, 2, 3, 4] squared list(map(lambda x: x**2, nums)) print(squared) # [1, 4, 9, 16]1.7 装饰器Decorator装饰器是一种高级用法它可以在不修改原函数代码的情况下为函数添加额外功能。本质上是一个返回函数的函数。python def timer(func): import time def wrapper(*args, **kwargs): start time.time() result func(*args, **kwargs) end time.time() print(f{func.__name__} 运行时间: {end - start:.4f}秒) return result return wrapper timer def slow_function(duration): time.sleep(duration)二、异常处理Exception Handling程序运行过程中难免遇到错误异常处理机制让我们可以捕获并处理这些错误防止程序崩溃。2.1 异常的基本结构Python使用try...except...else...finally来捕获和处理异常。python try: # 可能引发异常的代码 result 10 / 0 except ZeroDivisionError: # 处理特定异常 print(除数不能为零) except Exception as e: # 处理其他所有异常 print(f发生异常: {e}) else: # 没有发生异常时执行 print(计算成功结果是:, result) finally: # 无论是否发生异常都会执行 print(执行结束) 输出 除数不能为零 执行结束2.2 常见内置异常ZeroDivisionError除零错误IndexError索引越界KeyError字典键不存在ValueError值错误TypeError类型错误FileNotFoundError文件不存在AttributeError属性错误ImportError导入错误2.3 抛出异常raise我们可以使用raise主动抛出异常通常用于检查条件不满足时。python def divide(a, b): if b 0: raise ValueError(除数不能为零) return a / b try: divide(10, 0) except ValueError as e: print(e) # 除数不能为零2.4 自定义异常通过继承Exception类可以定义自己的异常类型使代码更具可读性。python class InsufficientFundsError(Exception): 账户余额不足异常 pass def withdraw(balance, amount): if amount balance: raise InsufficientFundsError(f余额不足当前余额: {balance}) return balance - amount try: new_balance withdraw(100, 200) except InsufficientFundsError as e: print(e)2.5 else与finally的使用场景**else**当try块没有抛出异常时执行通常用于放置依赖try成功执行的代码。**finally**无论是否异常都会执行常用于释放资源如关闭文件、数据库连接。python try: f open(data.txt, r) data f.read() except FileNotFoundError: print(文件不存在) else: print(文件读取成功内容长度:, len(data)) finally: f.close() # 确保文件被关闭2.6 异常链与raise ... fromPython 3引入了异常链允许在捕获一个异常时抛出另一个异常并保留原始异常信息。python try: int(abc) except ValueError as e: raise RuntimeError(转换失败) from e输出会显示原始异常和当前异常的关系。三、函数与异常的综合应用3.1 在函数内部处理异常函数可以封装异常处理逻辑对外提供更清晰的接口。python def safe_divide(a, b): try: return a / b except ZeroDivisionError: return None result safe_divide(10, 0) if result is None: print(除零错误) else: print(结果:, result)3.2 异常传递如果函数内部不处理异常异常会向调用者传递。python def read_file(filename): with open(filename, r) as f: return f.read() try: content read_file(missing.txt) except FileNotFoundError: print(文件不存在请检查路径)3.3 断言assert与异常assert用于调试时检查条件条件为False时抛出AssertionError。python def set_age(age): assert age 0, 年龄必须为正数 print(f年龄设置为 {age}) set_age(-5) # AssertionError: 年龄必须为正数四、总结本文详细介绍了Python中函数和异常处理的核心概念。希望这篇文章对你有所帮助欢迎在评论区交流讨论