[英]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.