Встроенные функции и методы Python 3
Встроенные функции Python доступны в любой программе без импорта: print(), len(), sorted() и еще около семидесяти имен. Ниже они собраны в тематические таблицы с кратким описанием, а примеры показывают самые полезные сочетания. Отдельно разобрано, чем встроенная функция отличается от метода и как случайно сломать стандартное имя.

Содержание статьи
Что такое встроенные функции
Встроенные функции живут в модуле builtins, который интерпретатор подключает автоматически. Когда в коде встречается имя, Python ищет его сначала в локальной области, затем в глобальной и только потом среди встроенных. Поэтому len() или abs() работают сразу, без строки import.
Посмотреть полный список можно прямо из интерпретатора. Функция dir() вернет все имена модуля, включая классы исключений, поэтому отфильтруем только вызываемые объекты с маленькой буквы:
import builtins
names = [n for n in dir(builtins)
if callable(getattr(builtins, n)) and n[0].islower()]
print(len(names))
print(names[:8])
# ['abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool']Точное число зависит от версии и способа запуска: модуль site при обычном старте добавляет служебные exit, quit, copyright, credits и license, а фильтр по маленькой букве отбрасывает __import__. В самом языке Python 3.12 описана 71 встроенная функция.
Функции и методы: в чем разница
Функция вызывается сама по себе и получает объект аргументом: len(items). Метод принадлежит конкретному типу и вызывается через точку: items.append(5). Встроенные функции универсальны и работают с объектами разных типов, а методы есть только у того типа, где они определены.
words = ['груша', 'Яблоко', 'арбуз']
print(sorted(words)) # функция: возвращает новый список
words.sort() # метод списка: меняет сам список, возвращает None
print(len(words), len('текст'), len({'a': 1})) # 3 5 1Многие встроенные функции внутри вызывают специальные методы объекта: len(x) обращается к x.__len__(), str(x) к x.__str__(). Поэтому собственный класс можно научить работать с len(), abs() или iter(). Методы стандартных типов разобраны отдельно: методы списка, строк и словарей.
Числа и математика
Эти функции работают с целыми, дробными и комплексными числами без подключения модуля math.
| Функция | Что делает |
|---|---|
| abs(x) | Модуль числа, для комплексного - его длина |
| divmod(a, b) | Кортеж из целой части и остатка от деления |
| pow(x, y, mod) | Степень, с третьим аргументом - по модулю |
| round(x, n) | Округление до n знаков, для половин - к четному |
| sum(it, start) | Сумма элементов, start прибавляется к результату |
| min(), max() | Наименьший и наибольший элемент, поддерживают key и default |
| bin(), oct(), hex() | Запись целого числа в двоичной, восьмеричной и шестнадцатеричной системе |
print(divmod(17, 5)) # (3, 2)
print(round(2.5), round(3.5)) # 2 4 - банковское округление
print(pow(3, 4, 5)) # 1, то есть 81 % 5
print(max([], default=0)) # 0 вместо ValueError на пустом спискеСоздание и преобразование типов
Имена встроенных типов одновременно работают как функции-конструкторы: они создают пустой объект или преобразуют переданное значение.
| Функция | Что делает |
|---|---|
| int(), float(), complex() | Числа из строки или другого числа; int('ff', 16) читает основание |
| str(), repr(), ascii() | Строковое представление: для людей, для отладки, только ASCII |
| bool() | Логическое значение: пустые коллекции, 0 и None дают False |
| list(), tuple(), set(), frozenset(), dict() | Коллекции из любого итерируемого объекта |
| bytes(), bytearray(), memoryview() | Неизменяемые и изменяемые последовательности байтов, доступ к буферу без копирования |
| chr(), ord() | Символ по коду Unicode и обратно |
| format() | Значение по спецификации формата, как в f-строках |
print(int('101', 2), int(' 42 ')) # 5 42
print(bool([]), bool('0')) # False True
print(ord('Я'), chr(1071)) # 1071 Я
print(format(1234567.891, ',.2f')) # 1,234,567.89Работа с коллекциями и итераторами
Эта группа используется чаще всего: функции перебирают элементы любого итерируемого объекта, будь то список, строка, файл или генератор.
| Функция | Что делает |
|---|---|
| len() | Количество элементов |
| range() | Ленивая последовательность целых чисел с началом, концом и шагом |
| enumerate() | Пары (номер, элемент), начало счета задается аргументом start |
| zip(), map() | Параллельный перебор и применение функции к каждому элементу |
| filter() | Только элементы, для которых функция вернула истину |
| sorted(), reversed() | Новый отсортированный список и обратный итератор |
| all(), any() | Истинны ли все элементы или хотя бы один |
| iter(), next(), aiter(), anext() | Получение итератора и следующего элемента, в том числе асинхронно |
| slice() | Объект среза, который можно сохранить в переменную |
scores = {'Аня': 91, 'Борис': 78, 'Вера': 85}
for place, (name, pts) in enumerate(
sorted(scores.items(), key=lambda p: p[1], reverse=True), start=1):
print(place, name, pts)
# 1 Аня 91
# 2 Вера 85
# 3 Борис 78
print(any(v < 80 for v in scores.values())) # TrueФункции map(), filter(), zip() и reversed() возвращают итераторы, а не списки. Их можно пройти только один раз, а чтобы увидеть содержимое, оборачивают в list(). Подробно про пару zip и map рассказано в статье о параллельном переборе данных.
Объекты, атрибуты и классы
Функции этой группы нужны для интроспекции, то есть исследования объектов во время работы программы, и для описания классов.
| Функция | Что делает |
|---|---|
| type(), isinstance(), issubclass() | Тип объекта и проверка принадлежности классу с учетом наследования |
| getattr(), setattr(), hasattr(), delattr() | Чтение, запись, проверка и удаление атрибута по имени-строке |
| dir(), vars() | Список доступных имен и словарь атрибутов объекта |
| id(), hash() | Уникальный идентификатор объекта и его хеш |
| callable() | Можно ли вызвать объект скобками |
| classmethod(), staticmethod(), property() | Декораторы методов класса, статических методов и свойств |
| super(), object() | Доступ к родительскому классу и базовый объект |
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
p = Point(2, 3)
print(vars(p)) # {'x': 2, 'y': 3}
print(getattr(p, 'z', 0)) # 0, атрибута нет - вернулось значение по умолчанию
print(isinstance(True, int)) # True: bool наследуется от intВвод, вывод и выполнение кода
Последняя группа отвечает за общение программы с пользователем и файлами, а также за запуск кода, собранного во время работы.
print()выводит значения, параметрыsep,endиfileуправляют разделителем, окончанием строки и местом вывода;- input() читает строку с клавиатуры, результат всегда
str; open()открывает файл и возвращает файловый объект;eval(), exec() иcompile()выполняют код из строки, их нельзя применять к данным от пользователя;- globals() и
locals()возвращают словари имен глобальной и локальной области; help()открывает справку,breakpoint()останавливает программу в отладчике,__import__()импортирует модуль по имени.
print('a', 'b', 'c', sep=' | ', end='!\n') # a | b | c!
age = int(input('Возраст: ')) # без int() получится строка
help(sorted) # справка по любой функцииОшибка затенения встроенных имен
Имена встроенных функций не зарезервированы, их можно случайно переопределить. Если назвать переменную list, sum, max или id, встроенная функция станет недоступна до конца области видимости.
sum = 10 + 20
print(sum([1, 2, 3]))
# TypeError: 'int' object is not callable
del sum # удаляем свою переменную
print(sum([1, 2, 3])) # 6, встроенная функция снова виднаТакую ошибку помогают ловить линтеры: они предупреждают о затенении встроенных имен. Полный перечень с подробными сигнатурами приведен в официальной документации.
Частые вопросы
Ответы на вопросы, которые чаще всего задают о встроенных функциях.
Сколько встроенных функций в Python?
В документации Python 3.12 описана 71 встроенная функция. С версиями список меняется: например, aiter() и anext() появились в 3.10.
Нужно ли импортировать встроенные функции?
Нет, они доступны в любом модуле сразу. Импорт builtins нужен только для того, чтобы обратиться к оригинальной функции, если ее имя переопределено.
Чем sorted() отличается от list.sort()?
sorted() принимает любой итерируемый объект и возвращает новый список. sort() есть только у списков, меняет список на месте и возвращает None.
Почему print(map(...)) выводит непонятный объект?
map() возвращает ленивый итератор, а не список. Чтобы увидеть значения, преобразуйте результат: list(map(str, nums)).