9.1 函数的概念
函数是一段可重复使用的代码块,用于执行特定任务。使用函数可以提高代码复用性和可读性。
为什么要使用函数
- 代码复用:避免重复编写相同逻辑
- 模块化:将复杂问题分解为小任务
- 可维护性:修改一处即可影响所有调用
- 可读性:函数名表达意图
9.2 定义与调用函数
基本语法
1 2 3 4
| def 函数名(参数列表): """文档字符串""" 函数体 return 返回值
|
示例
1 2 3 4 5 6 7
| def greet(): print("Hello, Python!")
greet() greet()
|
带参数的函数
1 2 3 4 5
| def greet(name): print(f"Hello, {name}!")
greet("Alice") greet("Bob")
|
9.3 返回值
函数可以返回结果供调用者使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| def add(a, b): return a + b
result = add(3, 5) print(result)
def get_coordinates(): x = 10 y = 20 return x, y
x, y = get_coordinates() print(x, y)
def say_hello(): print("Hello")
result = say_hello() print(result)
|
9.4 参数传递
位置参数
1 2 3 4 5
| def introduce(name, age, city): print(f"{name}, {age}岁, 来自{city}")
introduce("Alice", 25, "Beijing") introduce("Bob", 30, "Shanghai")
|
关键字参数
1 2 3 4 5
| def introduce(name, age, city): print(f"{name}, {age}岁, 来自{city}")
introduce(age=25, city="Beijing", name="Alice")
|
默认参数
1 2 3 4 5 6
| def greet(name, greeting="Hello"): print(f"{greeting}, {name}!")
greet("Alice") greet("Bob", "Hi") greet("Charlie", "Good morning")
|
注意:默认参数必须放在位置参数后面
9.5 作用域
变量的作用域决定了在哪里可以访问它。
局部变量
1 2 3 4 5 6
| def my_function(): x = 10 print(x)
my_function()
|
全局变量
1 2 3 4 5 6 7 8
| count = 0
def increment(): global count count += 1
increment() print(count)
|
最佳实践
- 尽量避免使用
global
- 通过参数传递和返回值交互数据
- 全局常量可以使用大写命名
1 2 3 4 5
| MAX_SIZE = 100
def process_data(data): return data[:MAX_SIZE]
|
9.6 文档字符串
文档字符串用于说明函数的功能、参数和返回值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| def calculate_area(radius): """ 计算圆的面积 Args: radius (float): 圆的半径 Returns: float: 圆的面积 """ import math return math.pi * radius ** 2
print(calculate_area.__doc__) help(calculate_area)
|
9.7 函数类型提示
Python 3.5+ 支持类型提示,提高代码可读性。
1 2 3 4 5 6 7 8
| def greet(name: str) -> str: return f"Hello, {name}!"
def add(a: int, b: int) -> int: return a + b
def get_user(user_id: int) -> dict: return {"id": user_id, "name": "Alice"}
|
类型提示不会强制检查,仅用于提示和工具分析
9.8 lambda 表达式
lambda 是匿名函数的简洁写法。
基本语法
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| def add(a, b): return a + b
add = lambda a, b: a + b print(add(3, 5))
students = [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 20}, {"name": "Charlie", "age": 22} ]
students.sort(key=lambda s: s["age"]) print(students)
numbers = [1, 2, 3, 4, 5, 6] evens = list(filter(lambda x: x % 2 == 0, numbers)) print(evens)
squares = list(map(lambda x: x**2, numbers)) print(squares)
|
9.9 函数作为参数
Python 中函数是一等公民,可以作为参数传递。
1 2 3 4 5 6 7 8 9 10 11 12 13
| def apply_operation(numbers, operation): return [operation(x) for x in numbers]
def square(x): return x ** 2
def cube(x): return x ** 3
numbers = [1, 2, 3, 4, 5]
print(apply_operation(numbers, square)) print(apply_operation(numbers, cube))
|
9.10 本章小结
- 使用
def 定义函数,支持参数和返回值
- 参数类型:位置参数、关键字参数、默认参数
- 局部变量在函数内有效,全局变量在整个模块有效
- 文档字符串使用
""" """ 编写
- 类型提示提高代码可读性
- lambda 表达式用于简洁的匿名函数
- 函数可以作为参数传递
练习题
- 编写函数
is_prime(n),判断一个数是否为素数
- 编写函数
fibonacci(n),返回斐波那契数列前 n 项
- 编写函数
count_words(text),统计字符串中单词数量
- 使用 lambda 表达式将列表
["apple", "banana", "cherry"] 按字符串长度排序