如何在python

时间:2016-08-01 04:32:18

标签: python

如何用可选的输出参数编写函数。 例如

1)mat = ReadBinFile(filename)
2)[mat,titles] = ReadBinFile(filename)

如果我完成了#34; ReadBinFile"功能

return mat,titles

我有一个元组" mat"在第一个例子中

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

如果不向函数指示需要哪种返回类型,或屏蔽函数名称(请参阅我的注释),则无法执行此操作。

让我说明原因。

在Perl中,我们可以通过测试调用的 context 来做到这一点。第一个(单个返回值)是标量上下文,第二个是列表上下文。我们可以使用名为wantarray的函数进行测试(Google“python wantarray” - 其他搜索引擎可用)。出于这个原因和其他许多原因,Perl如果不是独一无二的话也是不寻常的。

Python并不像那样工作,尽管与其他语言相比,内省可以采用极端的方式。作业的形式是:

 name = object

其中name是无类型引用。所以:

 mat = ReadBinFile(filename)

即使通过一些偷偷摸摸的方式,我们检查了字节码,我们也无法知道对象mat应该引用哪个类。 listtupleintbirdplane

您显示的语法:

[mat,titles] = ReadBinFile(filename)

是一个谜题。虽然有效,但它没有实际区别:

mat,titles = ReadBinFile(filename) 

当然是一个元组。那么,我们如何判断:

mat = ReadBinFile(filename)

应该是tuplelist或任何类别的对象mat应该引用。

毕竟,在我看来,即使在Perl中,返回不同类的对象也是一种可疑的做法。有一些例外情况,例如在某些情况下返回None。为什么可疑?因为代码变得难以阅读,修改和支持。

答案 1 :(得分:0)

据我研究,这是我通过使用“_”找到的唯一令人信服的方法,但是当你调用函数时,而不是在函数内部。举个例子:

mat, _= ReadBinFile(filename) 如果你想要“垫子”

_, title= ReadBinFile(filename) 如果你想要“标题”

答案 2 :(得分:-1)

有两种方法可以做到这一点。一种是接受确定返回值的参数。第二个(更有趣的)是返回一个生成器。

def ReadBinFile(filename):
   yield mat
   yield titles

mat,titles = ReadBinFile(filename)

这将让你只获得第一个或获得前n个返回值。