有时函数会给出一个您只想丢弃的返回值,而不是发送到输出流。处理这个问题的优雅方式是什么?如何优雅地忽略Python函数的某些返回值?
请注意,我们正在讨论的功能会返回一些您无法更改的功能。
def fn():
return 5
我个人曾经使用null
,但我正在寻找一个更Python的方式:
null = fn()
有时函数会给出一个您只想丢弃的返回值,而不是发送到输出流。处理这个问题的优雅方式是什么?如何优雅地忽略Python函数的某些返回值?
请注意,我们正在讨论的功能会返回一些您无法更改的功能。
def fn():
return 5
我个人曾经使用null
,但我正在寻找一个更Python的方式:
null = fn()
表明这一点的标准方法是分配你不想_
结果。举例来说,如果一个函数返回两个值,但你只想要第一个,这样做:
value, _ = myfunction(param)
大多数Python的棉短绒是否承认所用的_
,而不是抱怨未使用的变量。
如果你想忽略所有的回报,那么根本不要分配任何东西;除非你告诉它,否则Python不会对结果做任何事情。打印结果只是Python shell中的一个功能。
你不会忽略它,你将它分配给一个全局变量。引用nosklo:当你将gettext功能添加到别人的代码(定义了一个叫'_'的函数)时,“这个”约定“很糟糕”,所以它应该被禁止。如果有人使用他们的最后输出作为输入怎么办? – JohnJohn 2018-01-24 00:49:05
我真的很喜欢分配给空的想法 - 但它确实有一个意想不到的副作用:
>>> print divmod(5, 3)
(1, 2)
>>> x, null = divmod(5, 3)
>>> print null
2
对于那些谁码大多是在Python,这可能不是一个问题:空应该是公正尽可能多的垃圾价值_。
但是,如果您要在Javascript之类的其他语言之间切换,则完全可能会意外地使用null而不是None来编写比较。 Python并没有吐出与未知变量比较的常见错误,而只是默默接受它,现在你得到的是真实和错误的条件,你完全没有想到......这是你盯着的那种错误一小时的代码并不能确定是错误的,直到它突然袭击你,你觉得自己像一个白痴。
明显的修复不起作用,或者:
>>> x, None = divmod(5, 3)
File "<stdin>", line 1
SyntaxError: cannot assign to None
...这实在是令人失望。 Python中(和地球上所有其他语言)允许的参数所有是隐含扔掉,不管返回多少个变量:
>>> divmod(5, 3)
...但明确扔掉参数通过分配给他们是不允许的?
它感觉有点愚蠢的Python解释器的特点是分配给无作为语法错误,而不是有意的选择与明确的结果。任何人都可以想到一个理由吗?
“发送到输出流”是什么意思? – BrenBarn 2014-10-08 07:58:17
仅在全局范围内评估'fn()'会“打印”值5. – PascalVKooten 2014-10-08 07:58:44
这只在交互式解释器中才是正确的。如果将文件作为脚本运行,它不会发生,并且不会影响任何内容。我不认为在交互式会话中抑制输出的需要是一个足够大的交易,不仅仅是您已经拥有的解决方案。 – BrenBarn 2014-10-08 07:59:58