一、函数的多返回值
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)
四、实践建议
- 多返回值适用于关联性强的数据组
- 关键字参数提升复杂函数的可维护性
- 默认参数避免使用可变对象(如列表)
- 合理使用lambda保持代码简洁性
- 参数组合顺序:位置参数→*args→默认参数→**kwargs