如何在python中编写带有可选输出参数的函数

  • 本文关键字:输出 参数 函数 python python
  • 更新时间 :
  • 英文 :


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

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应该引用什么类的对象。listtupleintbirdplane

您显示的语法:

[mat,titles] = ReadBinFile(filename)

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

mat,titles = ReadBinFile(filename) 

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

mat = ReadBinFile(filename)

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

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

据我所研究,我发现的唯一令人信服的方法是使用_"但这是当你调用函数时,而不是在函数内部。例如:

CCD_ 15,如果您想要";mat";

CCD_ 16,如果您想要";标题";

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

def ReadBinFile(filename):
   yield mat
   yield titles
mat,titles = ReadBinFile(filename)

这将使您只获得第一个或获得前n个返回值。

最新更新