Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

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) 等(filtermaxmin 都接受接受单个参数的可调用对象,就像许多 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