[英]starred return statements in Python
我的問題是關於以下代碼:
def foo(*args):
return *args # syntax error
def bar(*args):
return 0, *args # ok
def foobar(*args):
if len(args) == 1:
return args[0]
return args
print(bar(1,2))
print(foobar(1,2))
print(foobar(1))
>>> (0,1,2)
>>> (1,2)
>>> 1
為什么foo
不具有與foobar
相同的行為,而不是無效的 Python 代碼? 我想我也願意接受foo
產生一個 singleton 元組,即(1,) = foo(1)
。 對此的任何見解將不勝感激!
關於解釋,我相信上面的評論已經解決了這個問題。 我編寫了以下代碼並讓它返回 (1,)。 您也可以按照建議,只需按照注釋的建議刪除原始代碼中 args 前面的 *。
def foo(*args):
return *args,
def bar(*args):
return 0, *args # ok
def foobar(*args):
if len(args) == 1:
return args[0]
return args
print(bar(1,2))
print(foobar(1,2))
print(foobar(1))
print(foo(1))
這是 output 的圖片。 我正在使用 Python 3.8
它根據您的需要返回 singleton 元組。 這是你需要的嗎?
正如評論中提到的,這種結構的有用性是相當可疑的。 特別是。 既然你最終返回了解壓值的tuple
組......那么為什么不返回tuple
本身呢?
如果你真的想完成這項工作,你可以從 Python 3.5 開始說:
return (*args,)
符合PEP-448 。 這會將args
項目解包到要返回的元組中。
從Python 3.8開始,您可以去掉括號:
yield 和 return 語句中的通用可迭代解包不再需要括號......
return *args,
您的bar()
使用鏈接 PEP 中描述的通用解包行為基本上相同,只是在元組中有前導項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.