This question already has answers here:
Star * operator on left vs right side of an assignment statement

(1 个回答)



Please explain the *elements,=iterable construct [duplicate]

(1 个回答)


3年前关闭。




我刚开始学习python。我正在关注他们在声明变量之前使用 * 的示例。我的问题是使用这个的目的是什么。
例如,我正在关注
for i in range(n):
  name, *l = input().split()
  s = list(map(float, l))
  a[name] = s

打印变量后,我得到一个字典,它是由 a.但不明白为什么 * 在 l 变量之前使用

最佳答案

这是 python 3 中引入的一个新的解包功能,称为 star unpacking 或 extended iterable unpacking

当你做

name, *l = input().split()
split 的结果分为两部分:
  • name 获取列表的第一个元素
  • l 获取列表的其余部分(浮点数)

  • 所以假设你有这样一行:
    name 0.0 1.0 2.0 3.0
    
    splitname 设置为 "name" ,而 l 接受 ["0.0", "1.0", "2.0", "3.0"]llist(map(float ... 转换为浮点数列表

    然后 name 用作键,浮点数列表用作值。

    旁白:你的循环可以用字典理解来总结,如下所示:
    a = {name:list(map(float,l)) for name, *l in (input().split() for _ in range(n))}
    

    关于python - 为什么 * 在 python 中声明变量之前使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45062375/

    10-16 17:29
    查看更多