Так как map требуется функция в качестве первого параметра, а list является правильным классом, то как работает карта?
map()
нуждается в вызываемой как Первый параметр Вы можете определять пользовательские вызываемые типы в Python, а классы Python действительно являются вызываемыми объектами.
Однако я слышал и о списке как о встроенной функции, которая возвращает объект списка.
Довольно много встроенных типов действительно все еще задокументированы как функции (какими они были через 1.x дней, если я правильно помню).
Только класс может вернуть объект
О, да? Это будет означать, что, поскольку все в Python является объектом, функции не могут ничего возвратить - даже объект None
singleton; -)
, который является ничем иным, как созданием объекта. Но если это класс, то список должен быть написан в Camelcase в соответствии с соглашением об именах классов в python, что не так.
То же, что и выше - довольно много встроенных типов называются функциями, в основном по историческим причинам. И есть случаи, когда имеет смысл не следовать соглашениям об именах, даже в вашем собственном коде. Например, декораторы, принимающие аргументы, могут быть определены как дважды вложенные функции или как вызываемые классы. Если ваш модуль сначала определил декоратор как функцию, то по какой-либо причине (читабельность, тестируемость и т. Д.) Вы решите изменить реализацию на вызываемый класс, вы, конечно же, не захотите нарушать код клиента, переименовывая его в CamelCase.
На самом деле, весь смысл наличия одного и того же механизма для вызова функций или экземпляров классов состоит в том, чтобы позволить заменять один другим другим, не нарушая клиентский код - еще одно применение наиболее важной функции ОО: polymorphi c dispatch.
Все вышеперечисленные пункты приводят меня к конфликту, что список - это класс или метод в python?
Это класс, определенно. Вы можете просто проверить это в вашей python оболочке:
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'>
>>>