簡體   English   中英

python參數解開令人困惑的行為

[英]python argument unpacking puzzling behaviour

我在使用python中的star運算符理解參數從列表中解包的過程時遇到問題。

我遵循了文檔條目,並試圖重新創建自己的小示例。

因此,我定義了一個簡單的數字列表:

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]

它做到了。

我想了解從列表中解壓縮參數的工作原理以及期望的結果,因為它看起來並不像我想的那么簡單。

僅當您在函數調用內部時,解壓縮才有效:

>>> 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

更改: 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打印,因為它不是功能。 它將適用於python3。例如:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM