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