Python函数(上)
学习目标
通过本集的学习,你将能够:
- 理解什么是函数以及为什么需要函数
- 使用 def 关键字定义函数
- 掌握函数参数的使用
- 理解返回值的概念
- 写出简单的函数并正确调用
1. 什么是函数?
函数是一段可重复使用的代码块,它接受输入,执行特定任务,然后返回输出。
1.1 为什么需要函数?
# 不使用函数:代码重复
print("欢迎来到课程!")
print("准备开始学习...")
print("学习完成!")
print("欢迎来到课程!")
print("准备开始学习...")
print("学习完成!")
# 使用函数:代码复用
def learn():
print("欢迎来到课程!")
print("准备开始学习...")
print("学习完成!")
learn()
learn()函数的优势:
- 代码复用
- 便于维护
- 逻辑清晰
- 模块化编程
1.2 函数的类比
厨房(程序)
├── 冰箱(数据)
├── 炉灶(CPU)
└── 食谱(函数)──→ 输入(食材)──→ 处理(烹饪)──→ 输出(菜肴)2. 定义函数与调用函数
2.1 函数定义的基本结构
def 函数名(参数列表):
"""文档字符串(可选)"""
函数体
return 返回值(可选)2.2 简单函数示例
# 无参数、无返回值的函数
def greet():
"""打招呼的函数"""
print("Hello, World!")
# 调用函数
greet() # 输出: Hello, World!
# 有参数的函数
def greet_person(name):
"""向指定的人打招呼"""
print(f"Hello, {name}!")
greet_person("Alice") # 输出: Hello, Alice!
greet_person("Bob") # 输出: Hello, Bob!2.3 函数调用流程图
主程序
│
▼
greet_person("Alice")
│
▼
┌─────────────────┐
│ 函数 greet_person │
│ 参数: name = "Alice" │
└─────────────────┘
│
▼
print(f"Hello, {name}!")
│
▼
返回主程序3. 参数与返回值
3.1 参数:向函数传递信息
# 一个参数
def square(x):
"""计算平方"""
result = x * x
print(f"{x} 的平方是 {result}")
square(5) # 输出: 5 的平方是 25
square(10) # 输出: 10 的平方是 100
# 多个参数
def add(a, b):
"""两数相加"""
result = a + b
print(f"{a} + {b} = {result}")
add(3, 5) # 输出: 3 + 5 = 8
add(10, 20) # 输出: 10 + 20 = 303.2 返回值:从函数获取结果
# 使用 return 返回值
def square(x):
"""计算平方并返回结果"""
return x * x
result = square(5)
print(result) # 输出: 25
# 使用返回值进行计算
a = square(3)
b = square(4)
c = a + b
print(c) # 输出: 25
# 返回多个值(以元组形式)
def get_size():
width = 100
height = 200
return width, height
w, h = get_size()
print(f"宽: {w}, 高: {h}") # 输出: 宽: 100, 高: 2003.3 参数与返回值的流程图
调用: result = add(3, 5)
│
▼
┌─────────────────────┐
│ 函数 add │
│ 参数: a = 3, b = 5 │
└─────────────────────┘
│
▼
result = a + b
│
▼
return result
│
▼
result = 84. 更多函数示例
4.1 判断数字奇偶
def is_even(n):
"""判断是否为偶数"""
return n % 2 == 0
print(is_even(4)) # 输出: True
print(is_even(5)) # 输出: False
# 使用函数
for i in range(1, 11):
if is_even(i):
print(f"{i} 是偶数")
else:
print(f"{i} 是奇数")4.2 计算最大值
def max_of_two(a, b):
"""返回两个数中的较大值"""
if a > b:
return a
else:
return b
print(max_of_two(10, 20)) # 输出: 20
print(max_of_two(50, 30)) # 输出: 50
def max_of_three(a, b, c):
"""返回三个数中的最大值"""
return max_of_two(max_of_two(a, b), c)
print(max_of_three(10, 30, 20)) # 输出: 304.3 列表操作
def sum_list(numbers):
"""计算列表中所有元素的和"""
total = 0
for num in numbers:
total += num
return total
nums = [1, 2, 3, 4, 5]
print(sum_list(nums)) # 输出: 15
def average_list(numbers):
"""计算列表的平均值"""
if len(numbers) == 0:
return 0
return sum_list(numbers) / len(numbers)
print(average_list(nums)) # 输出: 3.05. 实用案例
5.1 案例1:温度转换器
# temperature_converter.py
def celsius_to_fahrenheit(celsius):
"""摄氏度转华氏度"""
return (celsius * 9/5) + 32
def fahrenheit_to_celsius(fahrenheit):
"""华氏度转摄氏度"""
return (fahrenheit - 32) * 5/9
# 测试
print("0°C =", celsius_to_fahrenheit(0), "°F") # 32.0 °F
print("100°C =", celsius_to_fahrenheit(100), "°F") # 212.0 °F
print("32°F =", fahrenheit_to_celsius(32), "°C") # 0.0 °C
print("212°F =", fahrenheit_to_celsius(212), "°C") # 100.0 °C
# 用户交互
temp = float(input("请输入温度: "))
unit = input("请输入单位 (C/F): ").upper()
if unit == "C":
result = celsius_to_fahrenheit(temp)
print(f"{temp}°C = {result}°F")
elif unit == "F":
result = fahrenheit_to_celsius(temp)
print(f"{temp}°F = {result}°C")
else:
print("无效的单位")5.2 案例2:简单计算器
# simple_calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b == 0:
return "错误:除数不能为零"
return a / b
def calculator():
print("简单计算器")
print("1. 加法")
print("2. 减法")
print("3. 乘法")
print("4. 除法")
choice = input("请选择操作 (1-4): ")
num1 = float(input("请输入第一个数: "))
num2 = float(input("请输入第二个数: "))
if choice == "1":
result = add(num1, num2)
print(f"结果: {result}")
elif choice == "2":
result = subtract(num1, num2)
print(f"结果: {result}")
elif choice == "3":
result = multiply(num1, num2)
print(f"结果: {result}")
elif choice == "4":
result = divide(num1, num2)
print(f"结果: {result}")
else:
print("无效的选择")
calculator()5.3 案例3:统计字符串
# string_stats.py
def count_chars(text):
"""统计字符数"""
return len(text)
def count_words(text):
"""统计单词数"""
words = text.split()
return len(words)
def count_lines(text):
"""统计行数"""
lines = text.split('\n')
return len(lines)
def string_statistics(text):
"""综合统计"""
return {
'chars': count_chars(text),
'words': count_words(text),
'lines': count_lines(text)
}
# 测试
sample_text = """Hello World
This is a test
How are you?"""
stats = string_statistics(sample_text)
print(f"字符数: {stats['chars']}")
print(f"单词数: {stats['words']}")
print(f"行数: {stats['lines']}")6. 自测问题
- 定义函数使用什么关键字?
- 如何调用一个函数?
- return 语句的作用是什么?
- 函数可以有多个参数吗?
- 函数可以没有返回值吗?
7. 下集预告
下一集我们将继续学习Python函数的进阶内容,包括默认参数、可变参数、递归函数等!
参考资料
- Python官方文档: https://docs.python.org/3/tutorial/controlflow.html#defining-functions
- 《Python编程:从入门到实践》