如何编写具有可选输出参数的函数。例如
1) mat = ReadBinFile(filename)
或
2) [mat,titles] = ReadBinFile(filename)
如果我用完成了"ReadBinFile"功能
return mat,titles
在第一个示例中,我在"mat"中有一个元组
感谢您的帮助
如果不向函数指示需要哪种返回类型,或者不屏蔽函数名称,就无法做到这一点(请参阅我的注释)。
让我来说明原因。
在Perl中,我们可以通过测试调用的上下文来做到这一点。第一个(单个返回值)是标量上下文,第二个是列表上下文。我们可以使用一个名为wantarray
的函数进行测试(谷歌的"python wantrarray"-其他搜索引擎也可用)。出于这个原因和许多其他原因,Perl即使不是唯一的,也是不寻常的。
Python并不是这样工作的,尽管与其他语言相比,内省可能会走到极端。任务的形式是:
name = object
其中CCD_ 4是无类型引用。因此:
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
。为什么怀疑?因为代码变得难以阅读、修改和支持。
据我所研究,我发现的唯一令人信服的方法是使用_"但这是当你调用函数时,而不是在函数内部。例如:
CCD_ 15,如果您想要";mat";
CCD_ 16,如果您想要";标题";
有两种方法可以做到这一点。一种是接受一个确定返回值的参数。第二个(也是更有趣的)是返回一个生成器。
def ReadBinFile(filename):
yield mat
yield titles
mat,titles = ReadBinFile(filename)
这将使您只获得第一个或获得前n个返回值。