如何使用可选的输出参数编写函数。 在示例如何在Python中使用可选输出参数编写函数
1)mat = ReadBinFile(filename)
或
2)[mat,titles] = ReadBinFile(filename)
如果我完成与
return mat,titles
的 “ReadBinFile” 函数I在第一示例
具有元组中的 “垫”谢谢你的帮助
如何使用可选的输出参数编写函数。 在示例如何在Python中使用可选输出参数编写函数
1)mat = ReadBinFile(filename)
或
2)[mat,titles] = ReadBinFile(filename)
如果我完成与
return mat,titles
的 “ReadBinFile” 函数I在第一示例
具有元组中的 “垫”谢谢你的帮助
有两种方法可以做到这一点。一个是接受一个决定返回值的参数。第二,(更有趣的)是返回一个生成器。
def ReadBinFile(filename):
yield mat
yield titles
mat,titles = ReadBinFile(filename)
这将让你只获得第一个或获得第n个返回值。
这不起作用。如果你使用'mat = ReadBinFile(filename)','mat'将会获得生成器本身,而不是第一个产生的值。 – BrenBarn
我不认为有一种方法可以完成你想要做的事情。在Python中,您不能更改语法,但可以获得功能性结果。我非常肯定,这提供了您所需要的所有功能。 –
如果不向函数指示需要哪种返回类型,或者屏蔽函数名称(请参阅我的注释),则无法执行此操作。
让我来证明一下为什么。
在Perl中,我们可以通过测试调用的上下文来做到这一点。第一个(单一返回值)是标量上下文,第二个是列表上下文。我们可以使用名为wantarray
的函数进行测试(谷歌“python wantarray” - 其他搜索引擎可用)。由于这个原因,许多Perl不常见,如果不是唯一的话。
Python不能像那样工作,尽管与其他语言相比,内省可以被用于极端。转让形式为:
name = object
其中name
是无类型的参考。所以:
mat = ReadBinFile(filename)
即使通过一些偷偷摸摸的手段,我们考察了字节码,我们就无法知道应该什么类对象mat
的引用方式。 A list
,tuple
,int
,bird
,plane
?
的语法告诉你:
[mat,titles] = ReadBinFile(filename)
是一个谜。虽然有效,但它没有实际区别:
mat,titles = ReadBinFile(filename)
哪一个当然是元组。那么,我们如何才能知道:
mat = ReadBinFile(filename)
应该是一个tuple
,一个list
,或任何物体mat
的类应该参考一下。
毕竟,在我看来,不同类的返回对象是一个可疑的练习,即使在Perl中。有一些例外情况,例如在某些情况下返回None
。为什么怀疑?因为代码变得难以阅读,修改和支持。
这是什么情况?如果你不想要第二个元组元素,就忽略它。 – mhawke
你不能这样做。无论如何,这不是一个好主意。只需解压缩结果并丢弃任何不需要的元素。 – BrenBarn
在元组上使用生成器具有潜在的降低时间的优点(如果每个元素需要一段时间才能获得) –