Python编程基础五(函数进阶)

一、函数的多返回值

1.1 语法规则

Python允许函数通过单个return语句返回多个值,各值之间用逗号分隔:

def get_user_info():

return "Alice", 25, "alice@example.com"

1.2 接收方式

接收返回值时需使用相同数量的变量,保持顺序对应:

name, age, email = get_user_info()

print(f"姓名:{name},年龄:{age},邮箱:{email}")

1.3 类型支持

支持返回不同类型的数据组合:

def mixed_return():

return 3.14, [1,2,3], {"status": True}


二、函数的参数传递艺术

2.1 位置参数

  • 严格按定义顺序传递参数
  • 示例:

def connect(host, port):

print(f"连接{host}:{port}")

connect("localhost", 8080) # 正确

connect(8080, "localhost") # 错误!参数顺序颠倒

2.2 关键字参数

  • 突破顺序限制,增强代码可读性,函数调用时通过”键=值”形式传递参数
  • 混合使用规则:混用时位置参数必须在前且按顺序匹配

def config_server(ip, port, protocol="http"):

print(f"{protocol}://{ip}:{port}")

config_server(port=80, ip="192.168.1.1") # 纯关键字参数

config_server("192.168.1.1", protocol="https", port=443) # 混合使用

2.3 缺省参数

定义:缺省参数(又称默认参数)是在定义函数时为参数提供默认值的参数类型

语法规则:

所有位置参数必须出现在默认参数前(适用于函数定义和调用)

默认参数必须定义在参数列表的最后位置

作用机制:

当调用函数时没有传递该参数,则使用预设的默认值

若传递参数值则会覆盖默认值

def create_user(name, role="guest", active=True):

print(f"创建用户:{name} | 角色:{role} | 激活:{active}")

create_user("Bob") # 使用默认值

create_user("Alice", "admin") # 覆盖默认角色

2.4 不定长参数

位置传递(*args)

定义:不定长参数(可变参数)用于不确定调用时会传递多少个参数的场景,可以不传参也可以传多个参数。

实现方式:使用单个星号*标记形式参数,如*args

存储形式:所有传入的参数会被args变量收集,合并为一个元组(tuple)类型

特点:

参数数量完全不受限,可以传0个、1个或多个

参数会按照传入位置顺序存储在元组中

形式参数名通常约定为args(非强制但建议)

def calculate_sum(*args):

return sum(args)

print(calculate_sum(1,2,3)) # 6

print(calculate_sum(5,10,15,20)) # 50

关键字传递(**kwargs)

定义:用于接收不定数量键值对参数的传递方式

实现方式:使用双星号**标记形式参数,如​**​kwargs

存储形式:所有键值对会被kwargs接受并组成字典

特点:

必须使用”键=值”形式传递参数

参数顺序不影响结果

形式参数名通常约定为kwargs(keyword arguments缩写)

字典key会自动转为字符串类型

def build_profile(**kwargs):

for key, value in kwargs.items():

print(f"{key}: {value}")

build_profile(name="Charlie", age=30, occupation="Engineer")


三、匿名函数与高阶函数

3.1 函数作为参数

传统函数参数可以是数字、字符串、字典、列表、元组等数据,但函数本身也可以作为参数传递给另一个函数。

本质区别:数据参数传递的是具体数值,而函数参数传递的是计算逻辑,这是两者最根本的区别

def test_func(compute):

result=compute(1,2)

print(result)

def compute(x,y)

return x + y

test_func(compute)

执行流程:

test_func需要接收一个函数参数,该函数应能处理两个数字

compute函数定义了具体的计算逻辑(此处为加法)

调用时compute函数作为参数传入test_func

在test_func内部通过compute(1,2)执行传入的函数逻辑

核心特点:

逻辑可变性:传入的函数可以自由定义计算逻辑(加、减、乘、除等)

数据固定性:被计算的数据(1和2)在调用时是固定的

3.2 Lambda表达式

  • 简洁的匿名函数语法
  • 基本语法:lambda 参数: 表达式

参数部分:表示匿名函数的形式参数,如x,y表示接收2个形式参数

函数体限制:只能写一行代码,无法写多行代码,且自动返回表达式结果(无需return)

  • 示例比较:

# 传统函数定义

def add(x, y):

return x + y

# Lambda等价形式

lambda_add = lambda x, y: x + y

# 立即使用示例

print((lambda x: x**2 + 2*x + 1)(5)) # 36

3.3 应用案例

def test_func(compute):

result = compute(1, 2)

print(f"结果是:{result}")

test_func(lambda x, y: x + y)


四、实践建议

  1. 多返回值适用于关联性强的数据组
  2. 关键字参数提升复杂函数的可维护性
  3. 默认参数避免使用可变对象(如列表)
  4. 合理使用lambda保持代码简洁性
  5. 参数组合顺序:位置参数→*args→默认参数→**kwargs