🐍 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 普通函数

特性Lambdadef
命名 匿名 有名称
复杂度 单行表达式 任意复杂
使用场景 简单、一次性 复用、复杂逻辑
可读性 简短时好 逻辑清晰时好

🎨 函数式编程技巧

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

📝 最佳实践

  1. 单一职责:一个函数只做一件事
  2. 命名清晰:动词+名词,如calculate_total()
  3. 文档字符串:用三重引号说明功能
  4. 类型注解(Python 3.5+):
    def add(x: int, y: int) -> int:
        """返回两数之和"""
        return x + y
  5. 避免副作用:纯函数更易测试和维护

🎁 总结

函数是Python编程的基石。掌握函数定义、参数传递、返回值和lambda表达式,能让你的代码更加模块化、可读和高效。

核心要点

  • 使用def定义函数,return返回值
  • 灵活使用位置参数、关键字参数、默认参数、*args、**kwargs
  • Lambda适合简单场景,复杂逻辑用普通函数
  • 遵循DRY原则,将重复代码抽象为函数

希望这篇教程对你有所帮助!有问题欢迎在评论区交流。✨

posted @ 2026-03-22 17:36  码小小小仙  阅读(32)  评论(0)    收藏  举报