[英]Python tuple unpacking in return statement
Python語言(尤其是3.x)允許對迭代的非常一般的解包 ,其中一個簡單的例子就是
a, *rest = 1, 2, 3
多年來,這種拆包已經逐漸推廣(參見例如PEP 3132和PEP 448 ),允許它在越來越多的情況下使用。 因此,我驚訝地發現以下是Python 3.6中的無效語法(在Python 3.7中仍然如此):
def f():
rest = [2, 3]
return 1, *rest # Invalid
我可以通過將返回的元組封裝在括號中來使其工作,如下所示:
def f():
rest = [2, 3]
return (1, *rest) # Valid
我在return
語句中使用它的事實似乎很重要,因為
t = 1, *rest
確實是合法的,無論有沒有括號都會產生相同的結果。
這個案例是否被Python開發人員遺忘了,或者有什么理由說明這種情況是無效的語法?
這破壞了我認為我使用Python語言的重要合同。 考慮以下(也是有效的)解決方案:
def f():
rest = [2, 3]
t = 1, *rest
return t
通常,當我有這樣的代碼,我認為t
是一個臨時的名字,這是我應該能夠擺脫簡單地更換的t
在其定義的底線。 但在這種情況下,這會導致代碼無效
def f():
rest = [2, 3]
return 1, *rest
當然,在返回值周圍放置括號當然沒什么大不了的,但通常需要額外的括號來區分幾種可能的結果(分組)。 這不是這種情況,因為省略括號不會產生一些其他不需要的行為,而是根本沒有行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.