python – 从函数返回多个值的优雅方式

看起来在大多数主流编程语言中,从函数返回多个值是一个非常尴尬的事情。

典型的解决方案是创建一个结构或一个简单的旧数据类并返回它,或者通过引用或指针传递至少一些参数,而不是返回它们。

使用引用/指针是非常尴尬,因为它依赖于副作用,意味着你有另一个参数传递。

类/结构解决方案也是IMHO相当尴尬,因为你最终有一百万个小类/结构,只用于从函数返回值,产生不必要的杂乱和冗长。

此外,很多时候有一个返回值总是需要的,其余的仅在某些情况下由调用者使用。这些解决方案都不允许调用者忽略不需要的返回类型。

我知道处理多个返回值的一种语言是Python。对于那些不熟悉的人,它使用元组解包:

a, b = foo(c)  # a and b are regular variables.
myTuple = foo(c)  # myTuple is a tuple of (a, b)

有没有人有任何其他好的解决方案这个问题?欢迎使用除了Python以外的现有主流语言工作的习语和在非主流语言中看到的语言级解决方案。

几乎所有ML影响的功能langues(这是大多数)也有伟大的元组支持,使这种东西微不足道。

对于C我喜欢boost :: tuple plus boost :: tie(或std :: tr1如果你有它)

typedef boost::tuple<double,double,double> XYZ;

XYZ foo();

double x,y,z;
boost::tie(x,y,z) = foo();

或较少设计的例子

MyMultimap::iterator lower,upper;
boost::tie(lower,upper) = some_map.equal_range(key);
http://stackoverflow.com/questions/514038/elegant-ways-to-return-multiple-values-from-a-function

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 从函数返回多个值的优雅方式