浏览知识库目录

Python

使用*获取余下的项

python中可以捕获余下的参数,为什么res, a = range(10)这种写法是可以的,但是*res = range(10)这种写法不可以?

可以这样理解:

  • * 在赋值里不是“算术减号”,而是扩展解包(extended unpacking)语法
  • 它只能出现在目标是一个元组/列表解包结构里,比如
    a, *res, b = ...*res, = ...
  • 这类语法本质上要求左边有“解包结构”,也就是有逗号来构成一个目标序列。

所以:

  1. *res, a = range(10)

    • 左边是一个解包目标列表(类似元组):(*res, a),合法。
  2. *res = range(10)

    • 左边不是“解包结构”,只是一个带 * 的单独目标,语法上不允许,所以报错。

如果你想要全部收进 res,要这样写:

*res, = range(10)
# res == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

或者直接:

res = list(range(10))