有时函数会给出一个您想要丢弃的返回值,而不是发送到输出流。处理这个问题的优雅方法是什么?
请注意,我们正在讨论的函数会返回一些您无法更改的函数。
def fn():
return 5
我个人以前曾使用null
,但我正在寻找一种更加pythonic的方式:
null = fn()
答案 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指定为语法错误,而不是具有明确结果的有意选择。谁能想到这个理由呢?