为什么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中变成了一个“内置类型”