为什么inspect()认为map不是内置的?

以下代码返回false

import inspect
print(inspect.isbuiltin(map))

但是地图功能列在“内置”功能下。

为什么会这样?

回答

inspect.isbuiltin只会

如果对象是内置函数或方法,则返回 true 。

所述map内置是一个,而不是一个函数或方法:

>>> map
<class 'map'>

事实上,大多数返回迭代器的“内置函数”都是作为类实现的;调用它们会返回优化的实例,而不是重新使用某些通用迭代器类。

>>> zip  # zip iterator "function" is also a class
<class 'zip'>
>>> map(str, (1, 2, 34))  # map builds instances of map
<map object at 0x103fa34f0>

此外,请记住,术语“内置”在 Python 中有两个含义:

  • 编译对象,即内置于解释器中。
  • 的成员的builtins模块,每个模块中使用。

虽然大多数builtins是为了速度而编译的,但这不是必需的。

如果要检查名称是否属于builtins,请通过模块执行此操作:

>>> import builtins
>>> hasattr(builtins, "map")
True
>>> hasattr(builtins, "sum")
True
>>> hasattr(builtins, "reduce")
False

  • 添加到答案 `inspect.isclass(map)` 返回 `True`
  • 还值得注意的是`map`在python2中是一个“内置”,它只在python3中变成了一个“内置类型”

以上是为什么inspect()认为map不是内置的?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>