簡體   English   中英

Python 中的星號返回語句

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

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