Python函数“返回多个值”的实质是返回元组,通过解包赋值给多个变量;return x, y 与 return (x, y) 等效,而 return [x, y] 返回列表;解包要求变量数匹配,支持嵌套解包和*收集。

Python函数可以“返回多个值”,其实质是返回一个元组,再通过解包(unpacking)自动拆分到多个变量中。理解这一点,就能避免常见误解,比如以为Python有原生的“多返回值”类型。
返回值本质是元组
当函数用逗号分隔多个表达式作为返回值时,Python会自动将其打包成一个元组:
示例:
def get_user():return "Alice", 28, "Engineer"
result = get_user()
print(result) # ('Alice', 28, 'Engineer')
print(type(result)) #
解包让调用更直观
调用时用对应数量的变量接收,Python自动执行元组解包:
立即学习“Python免费学习笔记(深入)”;
- 变量数必须与元组长度一致,否则报
ValueError: too many values to unpack或not enough values - 可用下划线
_忽略不需要的值(如name, _, role = get_user()) - 支持星号
*收集剩余项(如a, *b, c = [1,2,3,4,5]→b得[2,3,4])
常见误用与避坑
以下写法看似返回多个值,实则逻辑不同:
-
return (x, y)和return x, y效果相同,都返回元组 -
return [x, y]返回的是列表,也能解包,但类型不同,影响后续操作(如不可哈希) - 若函数有时返回两个值、有时返回三个值,直接解包会出错;应先判断类型或统一结构(如始终返回三元元组,缺位用
None)
进阶:嵌套解包与函数式写法
解包可嵌套,适合处理结构化数据:
data = [("Alice", (28, "NY")), ("Bob", (31, "SF"))]for name, (age, city) in data: # 嵌套解包
print(f"{name} is {age} and lives in {city}")
也可将解包用于函数参数传递:
def greet(name, age):return f"Hi {name}, {age} years old"
info = ("Charlie", 25)
print(greet(*info)) # 等价于 greet("Charlie", 25)










