首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python函数中的不同返回值数

Python函数中的不同返回值数
EN

Stack Overflow用户
提问于 2015-06-08 07:24:13
回答 4查看 8.7K关注 0票数 10

从Python中的函数返回不同数量的返回值是否可以/良好实践?如果是,调用方应该如何处理返回值?例如:

代码语言:javascript
运行
复制
def func():
    if(condition_1):
        return 1,2
    if(condition_2):
        return 1
    if(condition_3):
        return 1,2,3,4

注释:、condition_1、condition_2和condition_3是函数函数的本地函数,因此调用方不知道将返回多少值。

EN

回答 4

Stack Overflow用户

发布于 2015-06-08 07:54:28

函数返回多个值是pythonic吗?对此有一个很好的解释。

但在你的例子中,它取决于你的用例。如果您知道如何处理返回的数据,那么使用它就没有问题。比如:

代码语言:javascript
运行
复制
def func():
    if(condition_1):
        return a,b
    if(condition_2):
        return (a, )
    if(condition_3):
        return c,d,e,f
    if(condition_4):
        return a,b

vals = func()
if len(vals) == 2:
    # We are sure that we will get `a,b` in return
    do something ...
elif len(vals) == 3:
    ...

在上面的例子中,处理vals元组的函数知道如何根据某些标准处理返回的数据。它有两个返回相同数据的return可能性!

如果您确切地知道如何处理数据,那么可以使用不同的返回数。这里的关键点是函数做一个单一的工作,。如果您在识别返回值方面有问题,那么您的函数正在执行多个任务,或者您必须避免使用不同数量的参数。

票数 9
EN

Stack Overflow用户

发布于 2015-06-08 07:32:36

可以返回多个值,但必须将所有返回保持在相同的形式/类型中,以便使用:

代码语言:javascript
运行
复制
def func():
    if(condition_1):
        return 1, 2
    if(condition_2):
        return 1,    # return a tuple same as the others
    if(condition_3):
        return 1, 2, 3, 4
票数 6
EN

Stack Overflow用户

发布于 2015-06-08 08:27:47

我会避免这样做的。通常(尽管偶尔会有例外),正如其他人所提到的,从函数的每个分支返回相同类型的对象是一个好主意。然而,这不仅仅是用一个元素元组包装单数返回值--考虑一种模式,在这种模式中,您返回相同数量的事物(按相同的顺序),并对不适用于该分支的任何事物使用None或特定于类型的“null”值( 空对象模式)。

这意味着客户端代码始终可以这样做:

代码语言:javascript
运行
复制
a, b, c, d, e = func()

忽略任何它不关心的价值观。如果混合中也有空对象模式,那么即使是关心可能不存在的值的代码也可能不需要对它们进行特殊处理。如果您更改了元组的长度,则每个调用都必须为任何分支的结果做准备,这意味着它几乎必须与您的分支匹配。

对于您和调用代码来说,执行这种模式的一个非常好的方法是使用collections.namedtuple。这也有很好的好处,使您的代码立即更自我文档化。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30703301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档