🎯 函数的核心理念:存储与重用
📌 核心原则:DRY(Don't Repeat Yourself)
-
避免重复:相同的代码只写一次,多次使用
-
提高效率:减少代码量,便于维护和更新
-
增强可读性:将复杂逻辑封装为有意义的名称
🔧 函数的基本概念
📖 函数定义
python
def function_name(parameters):
"""文档字符串(可选,但推荐)"""
# 函数体代码
return result # 可选,没有return则返回None
🎮 函数调用过程
-
定义阶段:告诉Python记住这个函数,但不执行
-
调用阶段:执行函数体中的代码
-
返回阶段:回到调用处继续执行后续代码
python
def greet(): # 1. 定义函数(不执行)
print("Hello!")
greet() # 2. 调用函数(执行)
print("World") # 3. 继续执行
# 输出: Hello! World
🔄 函数执行流程
📍 调用堆栈可视化
text
主程序执行 → 遇到函数调用 → 暂停主程序
↓
进入函数执行 → 执行函数体代码
↓
函数返回 → 回到主程序暂停处
↓
继续执行主程序
💡 关键理解
函数调用就像是暂时暂停当前操作,等待函数返回一个值来替换调用位置
📚 内置函数(Built-in Functions)
🛠️ 常用内置函数示例
| 函数 | 描述 | 示例 |
|---|---|---|
print() | 输出内容 | print("Hello") |
input() | 获取用户输入 | name = input("Name? ") |
len() | 获取长度 | len("Hello") → 5 |
type() | 获取类型 | type(42) → <class 'int'> |
int() | 转换为整数 | int("42") → 42 |
float() | 转换为浮点数 | float("3.14") → 3.14 |
str() | 转换为字符串 | str(100) → '100' |
max() | 返回最大值 | max(1, 5, 3) → 5 |
min() | 返回最小值 | min(1, 5, 3) → 1 |
sum() | 求和 | sum([1, 2, 3]) → 6 |
sorted() | 排序 | sorted([3, 1, 2]) → [1, 2, 3] |
range() | 生成序列 | list(range(3)) → [0, 1, 2] |
🎨 函数输入-处理-输出模型
text
输入(参数) → 函数(处理) → 输出(返回值)
🎪 自定义函数
📝 定义与调用示例
python
# 定义函数
def greet(name): # name是参数
"""向指定的人问好"""
print(f"Hello, {name}!")
# 调用函数
greet("Alice") # "Alice"是参数值
greet("Bob") # "Bob"是参数值
# 输出:
# Hello, Alice!
# Hello, Bob!
🔍 参数 vs 参数值
| 术语 | 定义 | 位置 | 示例 |
|---|---|---|---|
| 参数(Parameter) | 函数定义时接收输入的变量 | 函数定义括号内 | def func(param): |
| 参数值(Argument) | 调用函数时传入的具体值 | 函数调用括号内 | func(value) |
🍰 类比理解
参数:像是咖啡机的咖啡粉槽(等待接收)
参数值:像是实际放入的咖啡粉(具体内容)
📤 返回值(Return Value)
🔄 返回值的作用
-
停止函数执行:遇到return立即结束函数
-
传递结果:将计算结果返回给调用者
python
def add(a, b):
"""计算两个数的和"""
result = a + b
return result # 1. 停止函数 2. 返回result的值
# 调用并接收返回值
sum_result = add(3, 5) # add(3, 5) 被替换为 8
print(sum_result) # 输出: 8
📊 返回值流程
python
def double(x):
return x * 2
# 调用过程:
# 1. 执行 double(5)
# 2. double函数返回 10
# 3. 10 替换掉 double(5)
# 4. y 被赋值为 10
y = double(5)
⚪ 无返回值函数
📭 None类型
-
无return语句:函数默认返回
None -
有return无值:
return或return None -
作用:执行操作但不返回具体结果
python
# 无返回值函数(执行操作)
def print_welcome(name):
print(f"Welcome, {name}!")
# 隐式返回 None
# 有返回值函数(计算结果)
def calculate_total(price, quantity):
total = price * quantity
return total # 返回计算结果
# 使用示例
print_welcome("Alice") # 只执行操作,不接收返回值
result = calculate_total(10, 3) # 接收返回值
print(f"Total: ${result}")
🏗️ 函数设计实践
1. 带参数和返回值的函数
python
def calculate_area(width, height):
"""计算矩形面积"""
area = width * height
return area
# 使用
room_area = calculate_area(5, 4)
print(f"房间面积: {room_area}平方米")
2. 多语言问候函数
python
def greet(lang):
"""根据语言返回问候语"""
if lang == 'es': # 西班牙语
return 'Hola'
elif lang == 'fr': # 法语
return 'Bonjour'
elif lang == 'cn': # 中文
return '你好'
else: # 默认英语
return 'Hello'
# 使用
print(greet('es')) # Hola
print(greet('fr')) # Bonjour
print(greet('en')) # Hello
3. 组合多个函数
python
def get_rectangle_area(width, height):
"""计算矩形面积"""
return width * height
def get_triangle_area(base, height):
"""计算三角形面积"""
return 0.5 * base * height
def calculate_total_area():
"""计算房间总面积(矩形+三角形)"""
rect_area = get_rectangle_area(10, 5)
tri_area = get_triangle_area(4, 3)
total = rect_area + tri_area
return total
print(f"总面积: {calculate_total_area()}平方米")
🎨 为什么要使用函数?
✅ 主要优点
-
模块化组织:
python
# 将代码组织成逻辑"段落" def process_data(data): """数据处理函数""" cleaned = clean_data(data) analyzed = analyze_data(cleaned) return generate_report(analyzed) -
避免重复:
python
# 重复代码(不好) print("=" * 50) print("报告标题") print("=" * 50) # ... 很多代码 ... print("=" * 50) print("报告结尾") print("=" * 50) # 使用函数(好) def print_separator(): print("=" * 50) print_separator() print("报告标题") print_separator() -
简化复杂代码:
python
# 复杂逻辑拆分为小函数 def validate_user_input(input_data): """验证用户输入""" if not check_format(input_data): return False if not check_length(input_data): return False if not check_content(input_data): return False return True -
创建可重用库:
python
# my_utils.py - 可以分享给其他人 def format_currency(amount): """格式化货币显示""" return f"${amount:,.2f}" def calculate_tax(price, tax_rate): """计算税额""" return price * tax_rate def generate_invoice(items, tax_rate=0.08): """生成发票""" # 使用上面的函数 pass
📋 函数使用指南
| 场景 | 建议 | 示例 |
|---|---|---|
| 重复代码 | 提取为函数 | 多处相同的计算逻辑 |
| 复杂逻辑 | 拆分为多个小函数 | 数据处理流程 |
| 特定功能 | 创建专用函数 | 数据验证、格式化 |
| 团队协作 | 建立函数库 | 共享工具函数 |
🐛 常见错误与调试
1. 忘记冒号
python
# 错误
def say_hello() # 缺少冒号
print("Hello")
# 正确
def say_hello(): # 有冒号
print("Hello")
2. 缩进错误
python
# 错误:混用空格和Tab
def my_func():
print("第一行") # 4个空格
print("第二行") # 1个Tab(不同编辑器可能不同)
# 正确:统一使用4个空格
def my_func():
print("第一行") # 4个空格
print("第二行") # 4个空格
3. 参数不匹配
python
# 定义
def greet(name, age):
print(f"{name} is {age} years old")
# 错误调用:缺少参数
greet("Alice") # TypeError: missing 1 required argument
# 正确调用
greet("Alice", 25)
4. 返回值使用错误
python
# 无返回值函数
def print_sum(a, b):
print(a + b)
# 没有return语句
# 错误:试图使用返回值
result = print_sum(3, 5) # result是None
print(result * 2) # TypeError: 不能将None与数字相乘
💎 核心要点总结
1. 函数三要素
-
名称:描述函数功能
-
参数:接收输入数据
-
返回值:输出处理结果
2. 定义与调用
-
定义:使用
def关键字,只定义不执行 -
调用:使用函数名加括号,传入参数值
3. 返回值机制
-
有返回值:使用
return返回具体结果 -
无返回值:默认返回
None,用于执行操作
4. 设计原则
-
单一职责:一个函数只做一件事
-
明确命名:函数名应清晰表达功能
-
良好注释:使用文档字符串说明用途
编程思维:函数是编程中的基本构建块。就像乐高积木一样,将小块的、专门的功能组合起来,可以构建出复杂而强大的程序。学会设计好的函数,是成为高效程序员的关键一步!
2609

被折叠的 条评论
为什么被折叠?



