Python学习笔记:函数基础精讲

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)

https://mp.weixin.qq.com/s/RlOc9AXsKKfTqX6Qva5-iA?scene=1