0

我在理解使用 python 中的星号运算符从列表中解包参数的过程时遇到问题。

我已经按照文档条目并尝试重新创建我自己的小例子。

所以我定义了一个简单的数字列表:

list = [1, 2, 3]

并进行了快速检查,这有效:

print(1, 2, 3)
(1, 2, 3)

这(仅用于单挑):

print([1, 2, 3])
[1, 2, 3]

另一方面,这个位失败

print(*[1, 2, 3])
  File "<stdin>", line 1
    print(*[1, 2, 3])
          ^
SyntaxError: invalid syntax

这也失败了:

print(*list)
  File "<stdin>", line 1
    print(*list)
          ^
SyntaxError: invalid syntax

我确保文档中的所有内容都有效:

list = [1, 2]
range(*list)
[1]

它确实做到了。

我想了解从列表中解包参数的确切工作原理以及对它的期望,因为它似乎不像我想象的那么简单。

4

2 回答 2

3

仅当您在函数调用中时,解包才有效:

>>> def foo(a,b,c):
...     pass
...
>>> foo(*[1,2,3])
>>>

在其他地方使用它会导致错误:

>>> (*[1,2,3])
  File "<stdin>", line 1
    (*[1,2,3])
     ^
SyntaxError: invalid syntax

在 Python 2.7 中,print不是函数,而是语句。就口译员而言,这是:

print(*[1,2,3])

在语法上等价于:

print *[1,2,3]

这是无效的。在 Python 3.X 中,print现在是一个函数,因此可以解包。

>>> print(*[1,2,3])
1 2 3

您可以通过从未来导入将功能移植print回 2.7:

>>> from __future__ import print_function
>>> print(*[1,2,3])
1 2 3
于 2013-10-07T12:35:40.300 回答
0

更改:print(\*[1, 2, 3])至:print(*[1, 2, 3])

>>> print(*[1,2,3])
1 2 3

>>> print(\*[1,2,3])
  File "<stdin>", line 1
    print(\*[1,2,3])
                   ^
SyntaxError: unexpected character after line continuation character

它不适用于 python2 打印,因为它不是函数。它适用于 python 3. 示例:

>>> def x(a,b,c):
...     print(a,b,c)

>>> x(*[1,2,3])
(1, 2, 3)
于 2013-10-07T12:28:47.297 回答