PEP 559 – 内置 noop()
- 作者:
- Barry Warsaw <barry at python.org>
- 状态:
- 已拒绝
- 类型:
- 标准跟踪
- 创建时间:
- 2017-09-08
- Python 版本:
- 3.7
- 历史记录:
- 2017-09-09
- 决议:
- Python-Dev 消息
摘要
此 PEP 提案添加一个名为 noop()
的内置函数,该函数除了返回 None
外什么都不做。
基本原理
在 Python 中实现一个无操作函数非常简单。事实上,它太简单了,以至于许多人一遍又一遍地重复实现它。在许多情况下,有一个通用的内置函数来执行无操作将非常有用。
一个用例是 PEP 553,您可以在其中将断点环境变量设置为以下内容,以有效地禁用它
$ setenv PYTHONBREAKPOINT=noop
实现
Python 中 noop()
函数的等效项正是
def noop(*args, **kws):
return None
C 内置实现可作为拉取请求获得 [1].
被拒绝的备选方案
noop()
返回内容
YAGNI。
它被拒绝是因为它会使语义复杂化。例如,如果您始终返回 *args
和 **kws
,那么当没有这些参数时您返回什么?返回一个包含 ((), {})
的元组有点难看,但却提供了一致性。但您可能还想只返回 None
,因为从概念上讲,这也是函数被传递的内容。
或者,如果传入了一个位置参数,例如 noop(7)
。您是返回 7
还是 ((7,), {})
?等等。
作者声称您永远不需要 noop()
的返回值,因此它将始终返回 None
。
Coghlan 的对话(为格式而编辑)
我对这一点的反驳是map(noop, iterable)
、sorted(iterable, key=noop)
等(filter
、max
和min
都接受接受单个参数的可调用对象,就像许多 itertools 操作一样)。使
noop()
成为这些情况下有用的默认函数只需要定义为def noop(*args, **kwds): return args[0] if args else None对反驳的反驳是,在所有这些情况下使用
None
作为默认值会更快,因为它可以让算法完全跳过回调,而不是调用它,然后让它不做任何有用的事情。
参考资料
版权
本文件已置于公有领域。
来源: https://github.com/python/peps/blob/main/peps/pep-0559.rst
最后修改时间: 2023-09-09 17:39:29 GMT