Встроенные функции Python: какие нужно знать и на какие не стоит тратить время
, отредактировано
Ключевые выводы
- В Python около 70 встроенных функций, но для начала достаточно знать 20-25 основных
- Функцииlen,str,int,list,dict,rangeиспользуются практически в каждом проекте
-enumerate,zip,sorted,any/all— неочевидные, но крайне полезные функции для чистого кода
- Функцииbreakpoint,dir,type,helpнезаменимы при отладке
- Остальные встроенные функции изучайте по мере необходимости — не тратьте время на запоминание всего списка
В Python существуют десятки встроенных функций и классов, сотни инструментов, входящих в стандартную библиотеку Python, и тысячи сторонних библиотек на PyPI. Держать всё в голове начинающему программисту нереально. В статье расскажем про стандартные встроенные функции Python: какие используются часто, а какие вам, вероятно, не пригодятся никогда.
Чтобы разобраться, на какие функции стоит обратить внимание, их следует разделить на группы:
- общеизвестные: почти все новички используют эти функции и довольно часто;
- неочевидные для новичков: об этих функциях полезно знать, но их легко пропустить, когда вы новичок в Python;
- понадобятся позже: об этих встроенных функциях полезно помнить, чтобы найти их потом, когда/если они понадобятся;
- можно изучить когда-нибудь: это может пригодиться, но только при определённых обстоятельствах;
- скорее всего, они вам не нужны: они вряд ли понадобятся, если вы не занимаетесь чем-то достаточно специализированным.
- частые вопросы
Встроенные функции в первых двух категориях являются основными. Они в конечном итоге будут нужны почти всем начинающим программистам на Python. Встроенные модули в следующих двух категориях являются специализированными, но потребности в них будут варьироваться в зависимости от вашей специализации. Категория 5 — это скрытые встроенные функции. Они очень полезны, когда в них есть необходимость, но многим программистам Python они, вероятно, никогда не понадобятся.
Общеизвестные функции
Если вы уже писали код на Python, эти модули должны быть вам знакомы.
Вряд ли найдётся разработчик, даже начинающий, который не знает эту функцию вывода на экран:
len
В Python нет синтаксиса вроде my_list.length() или my_string.length, чтобы получить длину строки или списка. Для этого есть функция len:
Нравится вам такая реализация или нет, другой альтернативы не предусмотрено, поэтому к этой функции стоит привыкнуть.
str
К сожалению, в отличие от многих других языков программирования, в Python нельзя объединить строку с нестроковым типом данных:
Python отказывается приводить целое число 3 к типу строка, поэтому нужно сделать это вручную:
int
Если нужно пользовательский ввод преобразовать в integer, или если нужно извлечь десятичное число из числа с плавающей запятой:
Эту функцию также можно использовать для отсечения дробной части у числа с плавающей запятой, хотя при этом округление всегда будет к нулю:
Обратите внимание, если нужно обрезать дробную часть при делении, оператор «//» будет более эффективным:
float
Если строка, которую надо конвертировать в число, не является целым числом, здесь работает float:
Float также можно использовать для преобразования целых чисел в числа с плавающей запятой для деления с плавающей запятой:
В Python 2 такое преобразование необходимо, но в Python 3 целочисленное деление и деление с плавающей запятой уже являются отдельными операторами.
list
Эта функция может очень облегчить задачу, если вы хотите составить список из итерируемого объекта (например, набора, генератора, словаря и пр.):
При работе со списком метод copy позволяет создать его копию:
Если вы не знаете, с какими элементами работаете, функция list даёт универсальный механизм:
Также можно использовать списковое включение, но делать это не рекомендуется.
Обратите внимание, когда вы хотите создать пустой список, следует использовать буквальный синтаксис:
Использование «[ ]» считается более идиоматическим, так как эта запись более эффективна и проста в освоении.
tuple
Эта функция во многом похожа на функцию list, за исключением того, что она создает tuple:
Если вы пытаетесь создать хешируемую коллекцию (например, ключ словаря), стоит обратить внимание на кортежи.
dict
Эта функция создаёт новый словарь.
Подобно спискам и кортежам, dict эквивалентна проходу по множеству пар ключ-значение и созданию из них словаря.
Дан список кортежей, по два элемента в каждом.
Выведем его на экран с помощью цикла.
То же самое, но с использованием dict.
Функция dict может принимать 2 типа аргументов:
- другой словарь (в этом случае словарь копируется)
- список кортежей (по 2 элемента в каждом), как в примере выше.
Поэтому следующий код также будет работать.
Функция dict также может принимать ключевые слова в качестве аргументов:
Но рекомендуется всё же использовать литералы вместо ключевых слов.
Такой синтаксис более гибок и немного быстрее. Но самое главное он более чётко представляет конечный результат.
Как в случае со списком и кортежем, пустой словарь следует создавать с использованием литерального синтаксиса:
Использование «{ }» более идиоматично и эффективно с точки зрения использования CPU.
set
Функция set создаёт новый набор. Она принимает итерации из хешируемых значений и возвращает набор (множество):
Создать пустой набор с «{ }» нельзя (фигурные скобки создадут пустой словарь), поэтому необходимо использовать set:
Можно использовать и другой синтаксис.
Такой способ имеет недостаток — он сбивает с толку (он основан на редко используемом синтаксисе). Функция set понятнее.
range
Эта функция создаёт объект range, который представляет собой диапазон чисел:
Результирующий диапазон чисел включает начальный номер, но исключает конечный (range(0, 10) не включает 10).
Данная функция полезна при переборе чисел.
Обычный вариант использования — выполнить операцию n раз.
Функция range в Python 2 возвращает список. Это означает, что range(10000) создаст список из 10 000 элементов, а range(1000000000) попытается создать список из 1 000 000 000 элементов, заняв много оперативной памяти. В Python 3 функция range возвращает ленивый диапазон.
Функции, неочевидные для новичков
bool
Эта функция проверяет достоверность (истинность) объектов Python. Относительно числовых типов ноль — falsy, а все остальные числа — truthy:
Применяя bool к коллекциям, будет проверяться их длина (больше 0 или нет):
Проверка истинности очень важна в Python. Вместо того, чтобы задавать вопросы о длине контейнера, многие питонисты спрашивают о достоверности (истинности):
Данная функция используется редко. Но, если нужно привести значение к логическому типу — это один из наиболее распространённых способов.
enumerate
Если нужно в цикле посчитать количество элементов (по одному элементу за раз), эта функция придёт на помощь:
Например, если нужно отслеживать номер строки в файле.
Enumerate также часто используется для отслеживания индекса элемента в последовательности:
Также следует обратить внимание, что новички в Python часто используют range(len(...)) вместо enumerate. Но делать этого не стоит.
zip
Эта функция ещё более специализирована, чем enumerate. Zip используется для одновременного перебора нескольких итерируемых объектов:
По сравнению с enumerate, последняя функция удобна, когда нужен индекс для отслеживания позиции в цикле, а zip удобен для перебора двух итерируемых объектов одновременно.
reversed
Функция reversed, как enumerate и zip, возвращает итератор:
Единственное, что можно сделать с этим итератором, пройтись по нему (но только один раз):
Подобно enumerate и zip, reversed является ленивым (lazy). Это означает, что можно зациклить его только один раз:
Есть несколько и других способов перевернуть списки в Python.
Данная функция, как правило, является лучшим способом «перевернуть» любой список.
В отличие от numbers.reverse(), reversed не изменяет исходный список.
reversed(numbers) (в отличие от numbers [::-1]) не создаёт копию списка, он выдаёт ленивый итератор.
Можно использовать факт, что reversed не копирует список. Например, для удаления элементов из списка в обратном порядке:
sum
Эта функция берёт набор чисел и возвращает их сумму.
В Python есть много вспомогательных функций, которые выполняют циклы за вас (отчасти потому, что они были позаимствованы из функциональных языков программирования):
min и max
Эти функции выдают минимальное и максимальное число из набора соответственно.
Данные методы сравнивают элементы, используя оператор <, а значит, все сравниваемые значения должны быть упорядочены:
Min и max также принимают key для пользовательского сравнения:
sorted
Эта функция принимает любой набор элементов и возвращает новый список всех значений в отсортированном порядке:
Данная функция (как min и max) сравнивает элементы, используя оператор <.
Sorted также позволяет настраивать сортировку с помощью key и реверса.
any и all
Эти функции могут быть использованы в паре с генератор-выражениями, чтобы определить, удовлетворяют ли элементы итерируемого объекта заданному условию.
Используя all, можно переписать функцию palindromic из цикла for:
Отрицание условия и возвращаемого значения позволит также использовать any:
5 функций для отладки
Эти функции часто игнорируются, но будут полезны для отладки и устранения неисправностей в коде.
breakpoint
Если нужно приостановить выполнение кода и перейти в командную строку Python, эта функция вам пригодится.
Эта встроенная функция была добавлена в Python 3.7, но если вы работаете в более ранних версиях, можно использовать import pdb; pdb.set_trace().
dir
Эта функция может использоваться в двух случаях:
- просмотреть список всех локальных переменных;
- просмотреть список всех атрибутов конкретного объекта.
Из примера можно увидеть локальные переменные сразу после запуска и после создания новой переменной:
Если в dir передать созданный список x, можно увидеть все его атрибуты:
В выведенном списке атрибутов можно увидеть его типичные методы (append, pop, remove и пр.).
vars
Эта функция является своего рода смесью двух похожих инструментов: dir и locals.
Когда vars вызывается без аргументов, это эквивалентно вызову locals(), функции, которая показывает словарь всех локальных переменных и их значений:
Когда вызов происходит с аргументом, vars получает доступ к атрибуту __dict__ данного объекта:
Перед использованием vars было бы неплохо сначала обратиться к dir, а затем по необходимости перейти к vars.
type
Эта функция возвращает тип объекта, который вы ей передаете.
Тип экземпляра класса есть сам класс.
Тип класса — это его метакласс, обычно это type.
Атрибут __class__ даёт тот же результат, что и функция type:
Функция type, кроме отладки, иногда полезна и в реальном коде.
Обратите внимание, что при проверке типов обычно вместо type рекомендуется использовать isinstance, но иногда type — лучший вариант.
help
Если вы находитесь в Python Shell или делаете отладку кода с использованием breakpoint и нужна помощь для понимания какого-либо объекта, help окажет содействие.
В действительности вы, скорее всего, будете обращаться за помощью к поисковой системе, но если вы находитесь в Python Shell и не хотите переключаться между окнами, help может быть очень полезна.
Функции, которые пригодятся позже
В начале изучения Python эти функции вам по большей части будут не нужны, но в какой-то момент они станут актуальны.
open
Эта функция служит для открытия файла и последующей работы с ним. Но, если вы не знакомы с классами и менеджерами контекста, стоит отложить это обучение.
Несмотря на то, что работа с файлами очень распространена, далеко не все программисты на Python работают с файлами ежедневно.
input
Эта функция запрашивает у пользователя ввод, ждёт нажатия клавиши Enter, а затем возвращает введённый текст.
Чтение из стандартного ввода — это один из способов получить входные данные в программе. Несмотря на то, что это очень часто встречается на ранних этапах обучения, немногие программы на Python в итоге используют ввод с клавиатуры.
repr
Эта функция необходима для представления объекта в читабельном виде.
Для многих объектов функции str и repr возвращают одинаковый результат:
Но есть объекты, для которых их применение различается.
Строковое представление, которое вы видите в Python Shell, использует repr, а не str:
Также repr используется при ведении лог-журнала, обработке исключений или при создании собственных строковых представлений для объектов.
super
Эта функция очень важна, если используется наследование одного класса от другого.
Многие пользователи Python редко создают классы. Они не являются важной частью Python так же, как и в других объектно-ориентированных языках. Но если вы создаёте класс с наследованием, super будет незаменим.
property
Эта функция является декоратором для создания свойств объекта.
Декоратор позволяет создать атрибут, который всегда будет содержать возвращаемое значение определённого вызова функции.
Пример класса, который использует property.
Здесь вы можете увидеть доступ к атрибуту diameter объекта Circle:
Если вы занимаетесь объектно-ориентированным программированием на Python, вам, вероятно, стоит изучить property.
issubclass и isinstance
Функция issubclass проверяет, является ли класс подклассом одного или нескольких других классов:
Функция isinstance проверяет, является ли объект экземпляром одного или нескольких классов:
Функция isinstance может быть представлена как делегирование к issubclass:
Если вы перегружаете операторы, вам может понадобиться использование isinstance. Также isinstance используется для защитной проверки типов аргументов.
hasattr, getattr, setattr и delattr
Если нужно работать с атрибутами объекта, но имя атрибутов является динамическим (хранится в переменной), то эти четыре функции будут очень полезны.
Например, есть объект thing, который нужно проверить на конкретный атрибут:
Функция hasattr позволяет проверить, имеет ли объект определённый атрибут:
Функция getattr позволяет получить значение атрибута (с необязательным значением по умолчанию):
Функция setattr позволяет установить значение атрибута.
И delattr соответственно удаляет атрибут.
classmethod и staticmethod
Если у вас есть метод, который должен вызываться в экземпляре или в классе, вам нужен classmethod:
Немного сложнее придумать хорошее использование staticmethod. Вот пример с roman_to_int:
Функция roman_to_int не требует доступа к экземпляру или к самому классу, поэтому имеет смысл сделать её статическим методом.
next
Данная функция возвращает следующий элемент в итераторе.
Она может работать со следующими видами итераторов:
- файлы (отдаёт строки)
zipenumeratereversed- генераторы
- объекты
csv.reader - и другие
Функция next может быть представлена как способ вручную пройти по итерируемому объекту.
Функции, которые когда-нибудь можно выучить
Следующие встроенные функции Python определённо не бесполезны, но они более специализированы.
Эти функции вам, возможно, будут нужны, но также есть шанс, что вы никогда не прибегнете к их помощи:
mapfiltercompileexecevalabsroundhashid
Прочие специфические функции
__import__asciibin,oct,hexbytes,bytearray,memoryviewchr,ordcomplexdivmod,powformatfrozensetglobals,localsobject
Заключение
Если вы только начинаете свой путь в изучении Python, нет необходимости изучать все встроенные функции. Начните с самых основных и постепенно расширяйте свой инструментарий по мере необходимости.
Частые вопросы
Сколько встроенных функций в Python?
В Python 3.12 — 71 встроенная функция и класс. Полный список доступен через dir(__builtins__) или в официальной документации. Для повседневной работы достаточно знать 20-25 из них.
Какие встроенные функции Python используются чаще всего?
Наиболее часто используются: print, len, range, str, int, list, dict, type, isinstance, enumerate, zip, sorted, open, input и super.
Чем отличается встроенная функция от метода в Python?
Встроенная функция вызывается напрямую (len(my_list)), а метод — через объект (my_list.append(x)). Встроенные функции доступны глобально без импорта, а методы принадлежат конкретному типу данных.
Можно ли переопределить встроенную функцию Python?
Технически да — достаточно присвоить переменной имя встроенной функции, например list = [1, 2, 3]. Но это крайне нежелательно: вы потеряете доступ к оригинальной функции в текущей области видимости. Линтеры вроде pylint и flake8 предупреждают об этом.
Как посмотреть документацию по встроенной функции?
Используйте help(func_name) в интерактивном режиме или func_name.__doc__ для краткого описания. Также можно обратиться к docs.python.org.