如何用可选的输出参数编写函数。 例如
1)mat = ReadBinFile(filename)
或
2)[mat,titles] = ReadBinFile(filename)
如果我完成了#34; ReadBinFile"功能
return mat,titles
我有一个元组" mat"在第一个例子中
感谢您的帮助
答案 0 :(得分:0)
如果不向函数指示需要哪种返回类型,或屏蔽函数名称(请参阅我的注释),则无法执行此操作。
让我说明原因。
在Perl中,我们可以通过测试调用的 context 来做到这一点。第一个(单个返回值)是标量上下文,第二个是列表上下文。我们可以使用名为wantarray
的函数进行测试(Google“python wantarray” - 其他搜索引擎可用)。出于这个原因和其他许多原因,Perl如果不是独一无二的话也是不寻常的。
Python并不像那样工作,尽管与其他语言相比,内省可以采用极端的方式。作业的形式是:
name = object
其中name
是无类型引用。所以:
mat = ReadBinFile(filename)
即使通过一些偷偷摸摸的方式,我们检查了字节码,我们也无法知道对象mat
应该引用哪个类。 list
,tuple
,int
,bird
,plane
?
您显示的语法:
[mat,titles] = ReadBinFile(filename)
是一个谜题。虽然有效,但它没有实际区别:
mat,titles = ReadBinFile(filename)
当然是一个元组。那么,我们如何判断:
mat = ReadBinFile(filename)
应该是tuple
,list
或任何类别的对象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个返回值。