Python 函数
函数是 Python 中最基本的代码组织单位,它允许我们将一段可重用的代码封装起来,以便在需要时调用。
1. 函数的基本概念
函数是一段可重用的代码块,它接受输入(参数),执行特定的操作,并返回结果。使用函数可以:
- 提高代码的可重用性
- 使代码更加模块化
- 提高代码的可维护性
- 使代码结构更清晰
2. 函数的定义
在 Python 中,使用 def 关键字来定义函数:
def function_name(parameters):
"""函数文档字符串"""
# 函数体
return result
2.1 简单函数示例
def greet(name):
"""向指定的人打招呼"""
return f"你好,{name}!"
# 调用函数
message = greet("小明")
print(message) # 输出:你好,小明!
3. 函数参数
Python 函数支持多种参数类型:
3.1 位置参数
def add(a, b):
return a + b
result = add(3, 4) # 7
3.2 默认参数
def greet(name, greeting="你好"):
return f"{greeting},{name}!"
print(greet("小明")) # 你好,小明!
print(greet("小红", "早上好")) # 早上好,小红!
3.3 可变参数
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3, 4)) # 10
3.4 关键字参数
def person_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
person_info(name="小明", age=18, city="北京")
4. 返回值
函数可以返回一个或多个值:
4.1 返回单个值
def square(x):
return x * x
4.2 返回多个值
def get_coordinates():
return 10, 20
x, y = get_coordinates()
5. 函数的高级特性
5.1 Lambda 函数
Lambda 函数是一种匿名函数,适用于简单的操作:
square = lambda x: x * x
print(square(5)) # 25
5.2 函数作为参数
def apply_operation(x, y, operation):
return operation(x, y)
result = apply_operation(5, 3, lambda x, y: x + y)
print(result) # 8
5.3 闭包
def create_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
counter = create_counter()
print(counter()) # 1
print(counter()) # 2
6. 装饰器
装饰器是一种修改函数行为的工具:
def timer(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"函数执行时间:{end - start}秒")
return result
return wrapper
@timer
def slow_function():
import time
time.sleep(1)
return "完成"
print(slow_function())
7. 最佳实践
- 函数名应该清晰表达其功能
- 保持函数简短,一个函数只做一件事
- 使用文档字符串说明函数的用途
- 合理使用参数默认值
- 避免使用全局变量
- 适当使用类型提示
8. 常见错误和注意事项
- 可变对象作为默认参数
- 忘记 return 语句
- 参数顺序错误
- 作用域混淆
- 递归深度过大
9. 练习示例
# 计算斐波那契数列
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
# 使用列表推导式
def fibonacci_list(n):
return [fibonacci(i) for i in range(n)]
print(fibonacci_list(10)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
