如何优雅地忽略Python函数的某些返回值?

时间:2014-10-08 07:57:42

标签: python return-value

有时函数会给出一个您想要丢弃的返回值,而不是发送到输出流。处理这个问题的优雅方法是什么?

请注意,我们正在讨论的函数会返回一些您无法更改的函数。

def fn():
    return 5

我个人以前曾使用null,但我正在寻找一种更加pythonic的方式:

null = fn()

2 个答案:

答案 0 :(得分:17)

显示此标准的标准方法是将您不想要的结果分配到_。例如,如果函数返回两个值但您只想要第一个,请执行以下操作:

value, _ = myfunction(param)

大多数Python短语都会识别_的使用,而不会抱怨未使用的变量。

如果你想忽略所有的回报,那么就不要分配任何东西; Python除非你告诉它,否则不会对结果做任何事情。打印结果只是Python shell中的一项功能。

答案 1 :(得分:6)

我非常喜欢分配给null的想法 - 但它确实有一个意想不到的副作用:

>>> print divmod(5, 3)
(1, 2)
>>> x, null = divmod(5, 3)
>>> print null
2

对于那些主要使用Python编码的人来说,这可能不是问题:null应该与_一样多的垃圾值。

但是,如果您在其他语言(如Javascript)之间切换,则完全有可能意外地使用null而不是None编写比较。而不是吐出与未知变量进行比较的常见错误,Python会默默地接受它,现在你得到的是你完全不期望的真假条件......这就是你盯着看的那种错误一个小时的代码,无法弄清楚是不是错,直到它突然袭击你,你觉得自己像个白痴。

明显的修复方法也不起作用:

>>> x, None = divmod(5, 3)
File "<stdin>", line 1
SyntaxError: cannot assign to None

......这实在令人失望。 Python(以及地球上的所有其他语言)允许所有参数被隐式丢弃,无论返回多少变量:

>>> divmod(5, 3)

...但显式通过将参数分配给None来丢弃参数是不允许的?

Python解释器的特点是愚蠢地表示将None指定为语法错误,而不是具有明确结果的有意选择。谁能想到这个理由呢?