既然 map 需要一个函数作为第一个参数,而 list 是一个类,那么 map 是如何工作的呢?
map() 需要一个 callable 作为第一个参数。在 Python 中可以define custom callable types,Python 类确实是可调用对象。
但是,我听说 list 也是一个内置函数,它返回一个列表对象。
确实有相当多的内置类型仍然被记录为函数(如果我没记错的话,它们是在 1.x 天)。
只有类可以返回对象
哦,是吗?这意味着,由于 Python 中的所有内容都是一个对象,因此函数不能返回任何内容——即使是 None 单例对象也不可能;-)
这不过是一个对象的创建。但是如果它是一个类,那么根据python中类的命名约定,list应该是用驼峰写的,但事实并非如此。
和上面一样——很多内置类型被命名为函数,主要是出于历史原因。在某些情况下,即使在您自己的代码中也不遵循命名约定也是有意义的。例如,接受参数的装饰器可以定义为双重嵌套函数或可调用类。如果您的模块首先将装饰器定义为函数,那么无论出于何种原因(可读性、可测试性等),您决定将实现更改为可调用类,您当然不想通过在 CamelCase 中重命名客户端代码来破坏客户端代码。
实际上,使用相同的机制来调用函数或实例化类的全部意义在于允许在不破坏客户端代码的情况下替换另一个 - OO 最重要特性的另一个应用程序:多态调度。
以上所有点都让我产生了一个冲突,即 list 是 python 中的类或方法?
绝对是一门课。你可以在你的 python shell 中测试它:
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> type(list)
<class 'type'>
>>> type(dict)
<class 'type'>
>>> type(property)
<class 'type'>
>>> type(type)
<class 'type'>
>>> type(len)
<class 'builtin_function_or_method'>
>>>