【问题标题】:What does the asterisk do in *a, b, c = line.split()?*a, b, c = line.split() 中的星号有什么作用?
【发布时间】:2018-02-02 20:24:51
【问题描述】:

假设line 是:"Chicago Sun 01:52"

*a, b, c = line.split() 是做什么的?特别是星号的意义是什么?

编辑:经过测试,"Chicago""Sun""01:52" 似乎都存储在 abc 中。星号似乎导致 "Chicago" 作为列表的第一个元素存储在 a 中。所以,我们有a = ["Chicago"]b = "Sun"c = "01:52"。任何人都可以指出在这种情况下星号运算符的功能吗?

【问题讨论】:

  • 当你尝试这个时,你在变量中看到了什么?
  • 星号表示任意长度的东西(称为星号解包)。因此,直到您的 line.split() 方法中的最后三个元素之前的所有内容

标签: python python-3.x asterisk iterable-unpacking argument-unpacking


【解决方案1】:

用空格分割文本会给你:

In [743]: line.split()
Out[743]: ['Chicago', 'Sun', '01:52']

现在,这是一个 3 元素 list。分配将采用输出的最后两个元素并将它们分别分配给bc。然后*splat 运算符将该列表的其余部分传递给a,因此a 是一个元素列表。在这种情况下,a 是一个单元素列表。

In [744]: *a, b, c = line.split()

In [745]: a
Out[745]: ['Chicago']

In [746]: b
Out[746]: 'Sun'

In [747]: c
Out[747]: '01:52'

请查看PEP 3132Where are python's splat operators * and ** valid?,了解有关 splat 运算符、它们的工作原理以及适用范围的更多信息。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 2016-03-21
    • 2019-09-19
    • 2020-04-02
    • 1970-01-01
    • 2018-06-27
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多