Python 函数基础

9.1 函数的概念

函数是一段可重复使用的代码块,用于执行特定任务。使用函数可以提高代码复用性和可读性。

为什么要使用函数

  • 代码复用:避免重复编写相同逻辑
  • 模块化:将复杂问题分解为小任务
  • 可维护性:修改一处即可影响所有调用
  • 可读性:函数名表达意图

9.2 定义与调用函数

基本语法

1
2
3
4
def 函数名(参数列表):
"""文档字符串"""
函数体
return 返回值

示例

1
2
3
4
5
6
7
# 定义函数
def greet():
print("Hello, Python!")

# 调用函数
greet() # Hello, Python!
greet() # Hello, Python!

带参数的函数

1
2
3
4
5
def greet(name):
print(f"Hello, {name}!")

greet("Alice") # Hello, Alice!
greet("Bob") # Hello, 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) # 8

# 返回多个值(实际返回元组)
def get_coordinates():
x = 10
y = 20
return x, y

x, y = get_coordinates()
print(x, y) # 10 20

# 无 return 返回 None
def say_hello():
print("Hello")

result = say_hello()
print(result) # None

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") # Hello, Alice!
greet("Bob", "Hi") # Hi, Bob!
greet("Charlie", "Good morning") # Good morning, Charlie!

注意:默认参数必须放在位置参数后面


9.5 作用域

变量的作用域决定了在哪里可以访问它。

局部变量

1
2
3
4
5
6
def my_function():
x = 10 # 局部变量
print(x)

my_function() # 10
# print(x) # NameError: x 未定义

全局变量

1
2
3
4
5
6
7
8
count = 0  # 全局变量

def increment():
global count
count += 1

increment()
print(count) # 1

最佳实践

  • 尽量避免使用 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
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

# lambda 表达式
add = lambda a, b: a + b
print(add(3, 5)) # 8

# 常用场景:排序
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) # [2, 4, 6]

# 映射
squares = list(map(lambda x: x**2, numbers))
print(squares) # [1, 4, 9, 16, 25, 36]

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)) # [1, 4, 9, 16, 25]
print(apply_operation(numbers, cube)) # [1, 8, 27, 64, 125]

9.10 本章小结

  • 使用 def 定义函数,支持参数和返回值
  • 参数类型:位置参数、关键字参数、默认参数
  • 局部变量在函数内有效,全局变量在整个模块有效
  • 文档字符串使用 """ """ 编写
  • 类型提示提高代码可读性
  • lambda 表达式用于简洁的匿名函数
  • 函数可以作为参数传递

练习题

  1. 编写函数 is_prime(n),判断一个数是否为素数
  2. 编写函数 fibonacci(n),返回斐波那契数列前 n 项
  3. 编写函数 count_words(text),统计字符串中单词数量
  4. 使用 lambda 表达式将列表 ["apple", "banana", "cherry"] 按字符串长度排序
ByteFisher
分享编程技术 · 记录钓鱼乐趣
扫码关注
▸ 扫码关注 ◂
Python基础教程 系列
第 9/20 篇
分享: