🐍 Python函数完全指南:从定义到Lambda
函数是Python编程的核心构建块。本文将带你深入理解函数的定义、参数传递、返回值以及匿名函数lambda的使用。
📖 引言
在编程世界里,DRY原则(Don't Repeat Yourself)至关重要。函数正是实现这一原则的利器。Python中的函数灵活而强大,掌握它们是成为优秀Python开发者的必经之路。
🚀 函数定义基础
基本语法
def 函数名(参数1, 参数2...):
"""文档字符串(可选但推荐)"""
# 函数体
return 返回值 # 可选
简单示例
def greet(name):
"""向用户打招呼"""
return f"你好,{name}!欢迎使用Python!"
# 调用函数
message = greet("小明")
print(message) # 输出:你好,小明!欢迎使用Python!
🎯 参数详解
1. 位置参数
def add(a, b):
return a + b
result = add(3, 5) # a=3, b=5
print(result) # 8
2. 关键字参数
def introduce(name, age, city):
return f"{name}今年{age}岁,来自{city}。"
# 使用关键字参数,顺序不重要
info = introduce(age=25, city="北京", name="张三")
print(info)
3. 默认参数值
def power(base, exponent=2):
"""计算幂,默认平方"""
return base ** exponent
print(power(3)) # 9 (3²)
print(power(2, 3)) # 8 (2³)
⚠️ 注意:默认参数应该使用不可变类型(如None)而非可变类型(如列表)!
4. 可变参数 *args
def sum_all(*numbers):
"""接收任意数量的参数"""
return sum(numbers)
print(sum_all(1, 2, 3)) # 6
print(sum_all(1, 2, 3, 4, 5)) # 15
5. 关键字可变参数 **kwargs
def print_info(**kwargs):
"""接收任意数量的关键字参数"""
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="李四", age=30, job="工程师")
6. 参数组合使用
def advanced_func(a, b, *args, c=10, **kwargs):
"""展示所有参数类型的组合"""
print(f"位置参数: a={a}, b={b}")
print(f"可变参数: {args}")
print(f"默认参数: c={c}")
print(f"关键字参数: {kwargs}")
advanced_func(1, 2, 3, 4, 5, c=20, x=100, y=200)
🔄 返回值
单一返回值
def square(x):
return x * x
多返回值(实际是元组)
def get_stats(numbers):
"""返回最小值、最大值、平均值"""
return min(numbers), max(numbers), sum(numbers)/len(numbers)
min_val, max_val, avg = get_stats([1, 5, 3, 9, 2])
print(f"最小: {min_val}, 最大: {max_val}, 平均: {avg:.2f}")
提前返回
def divide(a, b):
if b == 0:
return None # 提前返回
return a / b
⚡ Lambda表达式
Lambda是匿名函数,适用于简单的一次性操作。
基本语法
lambda 参数: 表达式
常见用例
# 1. 排序key
students = [
("张三", 85),
("李四", 92),
("王五", 78)
]
students.sort(key=lambda x: x[1], reverse=True)
print(students) # 按分数降序
# 2. 配合map()
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # [1, 4, 9, 16, 25]
# 3. 配合filter()
evens = list(filter(lambda x: x % 2 == 0, range(10)))
print(evens) # [0, 2, 4, 6, 8]
# 4. 配合sorted()
words = ["apple", "pie", "banana", "kiwi"]
sorted_by_length = sorted(words, key=lambda w: len(w))
print(sorted_by_length) # ['pie', 'kiwi', 'apple', 'banana']
Lambda vs 普通函数
| 特性 | Lambda | def |
|---|---|---|
| 命名 | 匿名 | 有名称 |
| 复杂度 | 单行表达式 | 任意复杂 |
| 使用场景 | 简单、一次性 | 复用、复杂逻辑 |
| 可读性 | 简短时好 | 逻辑清晰时好 |
🎨 函数式编程技巧
from functools import reduce
# 函数组合
numbers = range(1, 6)
# 先映射再过滤再归约
result = reduce(
lambda x, y: x * y,
filter(lambda x: x > 2, map(lambda x: x**2, numbers))
)
print(result) # (3²) * (4²) * (5²) = 9 * 16 * 25 = 3600
📝 最佳实践
- 单一职责:一个函数只做一件事
- 命名清晰:动词+名词,如calculate_total()
- 文档字符串:用三重引号说明功能
- 类型注解(Python 3.5+):
def add(x: int, y: int) -> int: """返回两数之和""" return x + y - 避免副作用:纯函数更易测试和维护
🎁 总结
函数是Python编程的基石。掌握函数定义、参数传递、返回值和lambda表达式,能让你的代码更加模块化、可读和高效。
核心要点:
- 使用def定义函数,return返回值
- 灵活使用位置参数、关键字参数、默认参数、*args、**kwargs
- Lambda适合简单场景,复杂逻辑用普通函数
- 遵循DRY原则,将重复代码抽象为函数
希望这篇教程对你有所帮助!有问题欢迎在评论区交流。✨

浙公网安备 33010602011771号