第七章:Python函数进阶:多返回值、参数传递、匿名函数与高阶用法

一、函数的多返回值

1.1 如何返回多个值?

Python允许函数通过return一次性返回多个值,返回的数据以元组形式组织。
示例代码

def get_user_info():
    name = "张三"
    age = 25
    return name, age  # 返回元组("张三", 25)

# 接收返回值
user_name, user_age = get_user_info()
print(f"姓名:{
      
      user_name},年龄:{
      
      user_age}")

输出结果

姓名:张三,年龄:25

1.2 注意事项

  • 函数执行到第一个return就会结束,后续代码不会执行。
  • 返回多个值时,接收变量需按顺序一一对应。

二、函数的多种传参方式

2.1 位置参数(Positional Arguments)

按参数定义顺序传递值,顺序和数量必须严格匹配
示例代码

def greet(name, message):
    print(f"{
      
      name}, {
      
      message}")

greet("李四", "欢迎学习Python!")  # 正确
greet("欢迎学习Python!", "李四")  # 错误,顺序颠倒

2.2 关键字参数(Keyword Arguments)

通过键=值形式传参,无需关注顺序,但需参数名正确。
示例代码

def set_coordinates(x, y):
    print(f"坐标:({
      
      x}, {
      
      y})")

set_coordinates(y=50, x=100)  # 正确
set_coordinates(100, y=50)    # 正确(混合位置参数)
set_coordinates(x=100, 50)    # 错误(位置参数必须在关键字参数前)

2.3 缺省参数(Default Arguments)

为参数提供默认值,调用时可省略传参。
规则:缺省参数必须定义在非缺省参数之后。
示例代码

def order_food(dish, count=1):
    print(f"点了{
      
      count}{
      
      dish}")

order_food("宫保鸡丁")      # 输出:点了1份宫保鸡丁
order_food("鱼香肉丝", 3)   # 输出:点了3份鱼香肉丝

2.4 不定长参数(Variable-Length Arguments)

用于处理不确定参数数量的场景,分为两种形式:

  • 位置不定长参数*args):接收所有位置参数,保存为元组。
  • 关键字不定长参数**kwargs):接收所有键值对,保存为字典。

示例代码

def print_args(*args, **kwargs):
    print("位置参数:", args)      # 输出:(1, 2, 3)
    print("关键字参数:", kwargs)  # 输出:{'name': '王五', 'age': 30}

print_args(1, 2, 3, name="王五", age=30)

三、匿名函数(Lambda)

3.1 Lambda语法与使用场景

Lambda用于定义临时、一次性的简单函数,语法如下:

lambda 参数: 表达式

示例代码

# 计算两数之和
add = lambda x, y: x + y
print(add(3, 5))  # 输出:8

# 结合函数参数使用
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)    # 输出:[1, 4, 9, 16]

3.2 注意事项

  • Lambda函数体只能写一行代码。
  • 复杂逻辑应使用def定义普通函数。

四、函数作为参数传递(高阶函数)

4.1 传递逻辑而非数据

函数可以作为参数传递给另一个函数,实现逻辑的灵活组合。
示例代码

def compute(x, y, func):
    return func(x, y)

# 定义加法函数
def add(a, b):
    return a + b

# 传递add函数
result = compute(10, 20, add)
print(result)  # 输出:30

# 使用Lambda简化
result = compute(10, 20, lambda a, b: a * b)
print(result)  # 输出:200

4.2 应用场景

  • 排序时自定义比较规则(如sorted(list, key=lambda))。
  • 数据处理时动态指定计算逻辑。

五、总结与练习

5.1 重点回顾

  • 多返回值:用逗号分隔多个值,按顺序接收。
  • 参数传递
    • 位置参数需严格匹配顺序。
    • 关键字参数提高可读性。
    • 缺省参数需定义在末尾。
    • 不定长参数处理动态参数数量。
  • Lambda:临时匿名函数,简化代码。
  • 高阶函数:函数作为参数传递,增强灵活性。

5.2 练习题目

  1. 编写函数,返回两个数的最大值和最小值。
  2. 使用Lambda实现一个函数,判断数字是否为偶数。
  3. 定义一个高阶函数,对列表中的每个元素应用指定操作(如平方、加倍)。

参考代码

# 练习1
def max_min(a, b):
    return max(a, b), min(a, b)

# 练习2
is_even = lambda x: x % 2 == 0

# 练习3
def apply_operation(lst, func):
    return [func(x) for x in lst]

numbers = [1, 2, 3]
print(apply_operation(numbers, lambda x: x * 2))  # 输出:[2, 4, 6]