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 = 30

3.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, 高: 200

3.3 参数与返回值的流程图

        调用: result = add(3, 5)
              │
              ▼
    ┌─────────────────────┐
    │  函数 add           │
    │  参数: a = 3, b = 5 │
    └─────────────────────┘
              │
              ▼
        result = a + b
              │
              ▼
        return result
              │
              ▼
        result = 8

4. 更多函数示例

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))  # 输出: 30

4.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.0

5. 实用案例

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. 自测问题

  1. 定义函数使用什么关键字?
  2. 如何调用一个函数?
  3. return 语句的作用是什么?
  4. 函数可以有多个参数吗?
  5. 函数可以没有返回值吗?

7. 下集预告

下一集我们将继续学习Python函数的进阶内容,包括默认参数、可变参数、递归函数等!

参考资料

« 上一篇 Python控制流——条件与循环 下一篇 » Python函数(下)