Python
使用*获取余下的项
发布于 2026年9月3日
python中可以捕获余下的参数,为什么res, a = range(10)这种写法是可以的,但是*res = range(10)这种写法不可以?
可以这样理解:
*在赋值里不是“算术减号”,而是扩展解包(extended unpacking)语法。- 它只能出现在目标是一个元组/列表解包结构里,比如
a, *res, b = ...、*res, = ...。 - 这类语法本质上要求左边有“解包结构”,也就是有逗号来构成一个目标序列。
所以:
-
*res, a = range(10)- 左边是一个解包目标列表(类似元组):
(*res, a),合法。
- 左边是一个解包目标列表(类似元组):
-
*res = range(10)- 左边不是“解包结构”,只是一个带
*的单独目标,语法上不允许,所以报错。
- 左边不是“解包结构”,只是一个带
如果你想要全部收进 res,要这样写:
*res, = range(10)
# res == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
或者直接:
res = list(range(10))