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