Python学习笔记:函数基础精讲
一、函数的本质
函数是一段具有以下特征的代码块:
1.有明确的功能边界:完成特定任务
2.可重复调用:避免代码重复
3.有明确的输入输出:通过参数接收数据,通过返回值输出结果
1 2 3 4 5
| # 计算圆面积的函数 def calculate_circle_area(radius): """计算圆的面积""" area =3.14159* radius **2 return area
|
二、函数的定义与调用
正确语法
1 2 3 4
| def function_name(parameters): """docstring"""# 函数说明文档 function_body [return value]# 可选
|
常见错误示例
1 2 3 4 5 6
| # 错误1:函数名使用关键字 def print(x):# 覆盖了内置print函数 pass # 错误2:参数列表缺少冒号 def add(a, b)# 缺少冒号 return a + b
|
三、参数传递机制
1. 参数传递的本质
Python采用”对象引用传递”,即:
- 不可变对象(数字、字符串等)传递的是值
- 可变对象(列表、字典等)传递的是引用
1 2 3 4 5 6 7 8
| def modify_data(num, lst): num +=1# 不影响外部变量 lst.append(1)# 会影响外部列表 x =10 my_list =[1,2] modify_data(x, my_list) print(x)# 输出10(未改变) print(my_list)# 输出[1, 2, 1](已改变)
|
2. 参数类型详解
| 参数类型 |
正确用法 |
常见误区 |
| 位置参数 |
func(a, b) |
调用时顺序错误 |
| 关键字参数 |
func(b=2, a=1) |
与位置参数混用时顺序错误 |
| 默认参数 |
def func(a=1) |
默认值使用可变对象 |
| 可变参数 |
def func(*args) |
忘记解包序列 |
四、返回值规范
正确实践
1.单一职责:一个函数只做一件事
2.明确返回:所有执行路径都应返回预期类型
3.类型一致:返回值的类型应保持一致
1 2 3 4 5 6
| # 好的返回值设计 def get_user_age(user_id): """返回用户年龄,不存在返回None""" if user_id in user_database: return user_database[user_id]['age'] return None# 明确返回None而不是False或0
|
错误示例
1 2 3 4 5
| # 不好的设计:返回类型不一致 def process_data(data): if not data: returnFalse# 布尔值 return data.upper()# 字符串
|
五、最佳实践建议
1.函数长度:建议不超过50行(一屏可见)
2.参数数量:建议不超过5个,过多考虑拆分
3.命名规范:
- 函数名:小写字母+下划线,如
calculate_tax
- 参数名:具有描述性,如
student_name而非 s_n
- 文档字符串:遵循PEP 257规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def calculate_discount(price, discount_rate): """ 计算商品折扣后价格 参数: price (float): 商品原价 discount_rate (float): 折扣率(0-1) 返回: float: 折扣后价格 异常: ValueError: 当折扣率不在0-1范围时抛出 """ if not 0 <= discount_rate <=1: raise ValueError("折扣率必须在0到1之间") return price *(1- discount_rate)
|