Post

Встроенные функции Python: полный справочник

Все встроенные функции Python с рабочими примерами, подводными камнями и советами, когда что использовать — abs, zip, map, enumerate, sorted и ещё 50+.

Встроенные функции Python: полный справочник
🚀 Find Better AI Tools Faster Submit Your AI Tool & Reach Thousands of Builders Get Started →

В Python есть около семидесяти имён, которые можно вызвать, ни разу не написав строку import. Они живут в модуле builtins, который интерпретатор автоматически подмешивает в пространство имён каждого модуля — именно поэтому len([1, 2, 3]) работает где угодно без всякой настройки. В этом руководстве разобраны все 63 самые востребованные встроенные функции (включая конструкторы вроде dict(), list() и set() — в CPython они ведут себя точно как функции, хотя формально являются объектами типов), с рабочими примерами, реальным выводом и подводными камнями, на которые реально натыкаются на практике.

Если хотите сами посмотреть на полный список:

1
2
import builtins
print(dir(builtins))

А чтобы убедиться, что конкретное имя действительно встроенное, а не определено в вашем собственном файле, проверьте vars(builtins) или просто 'sorted' in dir(builtins).

Числа и математика

abs()

Возвращает модуль числа — расстояние от нуля, без учёта знака.

1
print(abs(-7), abs(3.5), abs(3 + 4j))
1
7 3.5 5.0

Для комплексного числа abs() возвращает модуль в виде float, поэтому abs(3 + 4j) равно 5.0, а не целому числу.

bin()

Преобразует целое число в его двоичное строковое представление с префиксом 0b.

1
print(bin(10), bin(-10))
1
0b1010 -0b1010

Подвох: результат — это str, а не число, а у отрицательных чисел просто ставится знак минус впереди, а не используется представление в дополнительном коде. Уберите префикс через bin(10)[2:] или используйте format(10, "08b"), если нужен вывод фиксированной ширины.

divmod()

Возвращает (частное, остаток) за один вызов — удобно для пагинации, арифметики часов или перевода единиц измерения.

1
2
q, r = divmod(47, 5)
print(q, r)
1
9 2

Подвох: для отрицательных чисел Python округляет деление вниз, поэтому divmod(-7, 2) даёт (-4, 1), а не (-3, -1).

pow()

Вычисляет base ** exp, а с третьим аргументом выполняет быстрое модульное возведение в степень — критично важно для криптографии.

1
2
print(pow(2, 10))
print(pow(4, 13, 497))
1
2
1024
445

Используйте pow(base, exp, mod) вместо (base ** exp) % mod для больших показателей степени — это намного быстрее и не строит гигантское промежуточное число.

round()

Округляет до ближайшего значения, используя банковское округление (округление до чётного) при равном расстоянии до соседних значений.

1
print(round(2.5), round(3.5), round(3.14159, 2))
1
2 4 3.14

Подвох: round(2.5) равно 2, а не 3 — почти всех это удивляет в первый раз.

hex()

Преобразует целое число в его шестнадцатеричное строковое представление с префиксом 0x.

1
print(hex(255))
1
0xff

Используйте при форматировании адресов памяти, цветовых кодов или при отладке бинарных данных.

float()

Преобразует значение в число с плавающей точкой или разбирает его из строки.

1
print(float("3.14"), float(10))
1
3.14 10.0

Подвох: float("nan") и float("inf") — валидные значения, всегда проверяйте пользовательский числовой ввод.

int()

Преобразует в целое число, отбрасывая дробную часть float в сторону нуля, и разбирает строки в любой системе счисления.

1
print(int(3.9), int("101", 2))
1
3 5

Используйте int(x, base), чтобы разбирать шестнадцатеричные/двоичные/восьмеричные строки без ручной арифметики.

Приведение типов в Python: явное и неявное

int(), float(), str(), bool(), list() и tuple() — это функции явного приведения типа: вы сами указываете целевой тип. Python также выполняет неявное приведение, но только между числовыми типами, и только когда информация не теряется:

1
2
3
print(3 + 2.0)          # int is widened to float -> 5.0
print(True + 1)         # bool is a subclass of int -> 2
print("2" + 2)          # TypeError: no implicit str/int conversion

Python никогда неявно не преобразует строку в число и наоборот, поэтому input() всегда требует явного приведения: age = int(input("Age: ")). Для ваших собственных классов неявного приведения тоже нет — определите __int__, __float__, __str__ или __bool__, и соответствующая встроенная функция воспользуется ими при явном вызове.

Итерируемые объекты и последовательности

any()

Функция any() в Python возвращает True, если хотя бы один элемент итерируемого объекта истинен, и False в противном случае.

1
2
print(any([0, "", None, 4]))
print(any([]))
1
2
True
False

Стоит запомнить две вещи: any([]) для пустого итерируемого объекта равно False, а any() работает по короткому замыканию — она прекращает обход на первом же истинном элементе, поэтому any(is_valid(x) for x in huge_list) никогда не вычисляет больше, чем нужно. Передавайте генераторное выражение, а не списковое включение, чтобы сохранить это преимущество.

all()

Возвращает True, если все элементы итерируемого объекта истинны — противоположность any().

1
2
3
print(all([1, "text", [0]]))
print(all([1, 0, 2]))
print(all([]))
1
2
3
True
False
True

Подвох: all([]) равно True, а не False. «Вакуумная истина» подводит в коде валидации — all(rule(x) for x in items) проходит, если items пуст, поэтому проверяйте пустоту отдельно, если это важно.

enumerate()

Сопоставляет каждый элемент итерируемого объекта с его индексом, избавляя от ручных счётчиков.

1
2
for i, name in enumerate(["a", "b", "c"], start=1):
    print(i, name)
1
2
3
1 a
2 b
3 c

Используйте, когда в цикле нужны и индекс, и значение — это чище, чем range(len(x)).

zip()

Поэлементно объединяет несколько итерируемых объектов в кортежи, останавливаясь по самому короткому из них.

1
2
3
names = ["Alice", "Bob"]
ages = [30, 25]
print(list(zip(names, ages)))
1
[('Alice', 30), ('Bob', 25)]

Подвох: несовпадающие длины молча обрезаются — используйте itertools.zip_longest, если это не то, что нужно.

map()

Применяет функцию к каждому элементу итерируемого объекта, возвращая ленивый итератор.

1
print(list(map(str.upper, ["a", "b", "c"])))
1
['A', 'B', 'C']

Используйте, когда списковое включение свелось бы просто к [f(x) for x in xs] — часто map(f, xs) читается чище для простых преобразований.

filter()

Оставляет только те элементы, для которых функция возвращает истинное значение.

1
print(list(filter(lambda x: x % 2 == 0, range(10))))
1
[0, 2, 4, 6, 8]

Передача None вместо функции сразу отфильтровывает ложные значения: filter(None, [0, 1, "", "x"]).

sorted()

Возвращает новый отсортированный список из любого итерируемого объекта, не изменяя оригинал.

1
print(sorted(["banana", "apple", "cherry"], key=len))
1
['apple', 'banana', 'cherry']

Используйте key= вместо собственного компаратора — это быстрее и идиоматично. Добавьте reverse=True для сортировки по убыванию.

reversed()

Возвращает обратный итератор по последовательности без копирования.

1
print(list(reversed([1, 2, 3])))
1
[3, 2, 1]

Работает с любым объектом, реализующим __reversed__ или поддерживающим индексацию — но не с произвольными итераторами.

range()

Создаёт неизменяемую, экономную по памяти последовательность целых чисел, вычисляемую лениво.

1
print(list(range(2, 10, 2)))
1
[2, 4, 6, 8]

Объекты range не хранят все значения в памяти — range(10**18) создаётся мгновенно.

len()

Возвращает количество элементов в контейнере, вызывая его метод __len__.

1
print(len("hello"), len([1, 2, 3]))
1
5 3

Подвох: выбрасывает TypeError на объектах без __len__, включая обычные итераторы и генераторы.

sum()

Складывает элементы итерируемого объекта, с опциональным начальным значением.

1
print(sum([1, 2, 3], 100))
1
106

Избегайте sum() для конкатенации строк — используйте "".join(), это значительно быстрее.

min() и max()

Возвращают наименьший/наибольший элемент, опционально по своему key.

1
2
words = ["kiwi", "banana", "fig"]
print(min(words, key=len), max(words, key=len))
1
fig banana

Обе функции принимают и несколько позиционных аргументов: max(3, 7, 2).

iter()

Превращает итерируемый объект в итератор либо повторно вызывает функцию до получения сигнального значения.

1
2
it = iter([1, 2, 3])
print(next(it), next(it))
1
1 2

Двухаргументная форма iter(callable, sentinel) — чистый способ читать файл или поток до маркера-разделителя.

next()

Продвигает итератор и возвращает следующий элемент, с опциональным значением по умолчанию.

1
2
it = iter([])
print(next(it, "done"))
1
done

Без значения по умолчанию next() выбрасывает StopIteration при исчерпании итератора — всегда передавайте значение по умолчанию, если не уверены.

slice()

Создаёт переиспользуемый объект среза, полезный, когда одна и та же логика среза применяется многократно.

1
2
s = slice(1, 5, 2)
print([0, 1, 2, 3, 4, 5, 6][s])
1
[1, 3]

Используйте именованные объекты slice, чтобы документировать намерение, когда логика индексации усложняется (например, при разборе полей фиксированной ширины).

Конструкторы типов

bool()

Преобразует любой объект в True или False по тем же правилам истинности, которые Python применяет в инструкции if.

1
print(bool(0), bool(""), bool([]), bool("0"), bool([0]))
1
False False False True True

Подвох: bool("0") и bool([0]) оба равны True — непустая строка или список истинны независимо от содержимого. По умолчанию ложны только None, нулевые числа и пустые контейнеры.

bytes()

Создаёт неизменяемую последовательность байтов, чаще всего кодируя строку.

1
2
3
print(bytes("héllo", "utf-8"))
print(bytes([72, 105]))
print(bytes(3))
1
2
3
b'h\xc3\xa9llo'
b'Hi'
b'\x00\x00\x00'

Три формы вызова часто путают: из строки нужно обязательно указать кодировку, из итерируемого объекта целых чисел получаются именно эти байты, а из «голого» числа n получается n нулевых байтов, а не само число.

bytearray()

Изменяемый аналог bytes() — те же конструкторы, но с возможностью присваивания.

1
2
3
4
buf = bytearray(5)
buf[0] = 0xFF
buf[1:3] = b"\xAA\xAA"
print(buf)
1
bytearray(b'\xff\xaa\xaa\x00\x00')

Чтобы заполнить весь буфер одним повторяющимся байтом, обойдите цикл: bytearray(b"\xff" * 1024) намного быстрее, чем присваивание по элементу.

str()

Преобразует любой объект в его удобочитаемую строковую форму через __str__.

1
print(str(3.14), str([1, 2]))
1
3.14 [1, 2]

Отличается от repr(): str() ориентирован на читаемость, repr() — на однозначное восстановление объекта.

list()

Строит список из любого итерируемого объекта или пустой список без аргументов.

1
print(list("abc"), list(range(3)))
1
['a', 'b', 'c'] [0, 1, 2]

Используйте list(x), чтобы материализовать генератор или результат map/filter, который нужно перебрать больше одного раза.

dict()

Строит словарь из именованных аргументов, отображения или итерируемого объекта пар ключ-значение.

1
print(dict(a=1, b=2), dict([("x", 1), ("y", 2)]))
1
{'a': 1, 'b': 2} {'x': 1, 'y': 2}

Начиная с 3.7 порядок вставки гарантирован — словари можно безопасно считать упорядоченными.

set()

Строит неупорядоченную коллекцию уникальных хешируемых элементов.

1
print(set([1, 2, 2, 3]))
1
{1, 2, 3}

Используйте для проверки принадлежности за O(1) и дедупликации — x in my_set обгоняет x in my_list на больших коллекциях.

frozenset()

Неизменяемая, хешируемая версия set — её можно использовать как ключ словаря или элемент множества.

1
2
fs = frozenset([1, 2, 3])
print(hash(fs) is not None)
1
True

Используйте, когда нужно значение, похожее на множество, но само по себе хешируемое, например в качестве ключа кэша.

tuple()

Строит неизменяемую упорядоченную последовательность из итерируемого объекта.

1
print(tuple([1, 2, 3]))
1
(1, 2, 3)

Кортежи хешируемы, если хешируемо их содержимое — это делает их естественными ключами словарей и элементами множеств.

memoryview()

Открывает доступ к памяти буфера без копирования — критично важно для производительности при работе с большими бинарными данными.

1
2
3
4
data = bytearray(b"hello")
mv = memoryview(data)
mv[0] = ord("H")
print(data)
1
bytearray(b'Hello')

Используйте при многократном срезании больших объектов bytes/bytearraymemoryview избегает копирования, которое иначе происходило бы при каждом срезе.

object()

Создаёт «голый» экземпляр базового класса, от которого наследуется любой объект в Python.

1
2
sentinel = object()
print(sentinel is object())
1
False

Классическое применение — уникальное «сигнальное» значение, гарантированно не равное ничему другому, полезное как маркер по умолчанию вместо None.

Интроспекция и атрибуты

type()

Возвращает тип объекта, а с тремя аргументами — динамически создаёт новый класс.

1
2
3
print(type(42), type("hi"))
Dynamic = type("Dynamic", (object,), {"x": 1})
print(Dynamic().x)
1
2
<class 'int'> <class 'str'>
1

Трёхаргументная форма — это способ, которым метаклассы и ORM генерируют классы во время выполнения.

isinstance()

Проверяет, является ли объект экземпляром класса или любого из кортежа классов.

1
print(isinstance(5, (int, float)))
1
True

Предпочитайте isinstance() вместо type(x) == SomeClass — она учитывает наследование и утиную типизацию.

issubclass()

Проверяет отношение между классами, а не между экземплярами.

1
print(issubclass(bool, int))
1
True

Подвох: в Python bool — подкласс int, поэтому True == 1 вычисляется в True.

dir()

Выводит имена в текущей области видимости или атрибуты/методы объекта.

1
print([n for n in dir([]) if not n.startswith("_")][:5])
1
['append', 'clear', 'copy', 'count', 'extend']

Отлично подходит для интерактивного исследования в REPL, но не является надёжным API-контрактом — для инструментов используйте модуль inspect.

vars()

Возвращает __dict__ объекта или ведёт себя как locals() без аргументов.

1
2
3
4
class P:
    def __init__(self):
        self.x = 1
print(vars(P()))
1
{'x': 1}

Не работает на объектах, использующих __slots__, поскольку у них нет __dict__.

callable()

Показывает, можно ли вызвать объект с () — функции, классы и любой экземпляр, определяющий __call__.

1
2
3
4
class Adder:
    def __call__(self, x): return x + 1

print(callable(len), callable(Adder), callable(Adder()), callable(42))
1
True True True False

Обратите внимание: callable(SomeClass) равно True, потому что вызов класса создаёт экземпляр.

hasattr()

Проверяет, существует ли у объекта атрибут, не выбрасывая исключение.

1
print(hasattr("hi", "upper"), hasattr("hi", "nope"))
1
True False

Внутри просто вызывает getattr() и перехватывает AttributeError — в критичных к производительности участках предпочитайте подход EAFP (try/except).

getattr()

Получает атрибут по имени, с опциональным значением по умолчанию, чтобы избежать исключения.

1
print(getattr("hi", "upper")(), getattr("hi", "missing", "N/A"))
1
HI N/A

Используйте, когда имя атрибута известно только во время выполнения — например, для динамической диспетчеризации на основе строки конфигурации.

setattr()

Устанавливает атрибут по имени — динамический аналог getattr().

1
2
3
4
class C: pass
obj = C()
setattr(obj, "value", 42)
print(obj.value)
1
42

Используйте для построения объектов из динамических данных (например, при десериализации словаря в экземпляр).

id()

Возвращает уникальный идентификатор объекта — в CPython это адрес в памяти.

1
2
3
a = [1, 2]
b = a
print(id(a) == id(b))
1
True

Используйте id() (или оператор is, который его использует) для проверки идентичности объектов, но никогда для проверки равенства — для этого есть ==.

hash()

Возвращает целочисленный хеш для хешируемых объектов — основа поиска в словарях и множествах.

1
print(hash("hello") == hash("hello"))
1
True

hash() поддерживают только хешируемые (обычно неизменяемые) объекты — списки и словари выбрасывают TypeError.

repr()

Возвращает однозначное, ориентированное на разработчика строковое представление объекта.

1
print(repr("hi\nthere"))
1
'hi\nthere'

Хорошая реализация __repr__ в идеале должна выглядеть как валидный код Python, воссоздающий объект.

oct()

Преобразует целое число в его восьмеричное строковое представление с префиксом 0o.

1
print(oct(64))
1
0o100

Часто применяется при работе с правами доступа к файлам, например oct(os.stat("f").st_mode).

ord()

Функция ord() в Python преобразует один символ в его код Unicode — целое число, которое идентифицирует этот символ.

1
print(ord("A"), ord(""))
1
65 8364

Подвох: выбрасывает TypeError, если передана строка длиной не в один символ — ord("AB") завершится ошибкой, поэтому применяйте функцию к строке через отображение, когда нужны коды всех символов: [ord(c) for c in "AB"].

chr()

Обратная функция к ord(): превращает код Unicode обратно в строку из одного символа.

1
2
print(chr(65), chr(8364))
print(int(chr(50)) + int(chr(50)))
1
2
A €
4

Вторая строка — классический экзаменационный вопрос. chr(50) — это символ "2", а не число 2; затем int() разбирает его обратно в 2, поэтому сумма равна 4. Без int() получилась бы "22" — конкатенация строк, а не сложение. Допустимые аргументы — от 0 до 0x10FFFF; всё, что выходит за эти границы, вызывает ValueError.

ascii()

Возвращает печатаемое представление объекта, как repr(), но экранирует каждый символ вне ASCII.

1
print(repr("café"), ascii("café"))
1
'café' 'caf\xe9'

Полезно при логировании в терминалы или файлы, кодировку которых вы не контролируете.

Выполнение кода и ввод-вывод

print()

Записывает текст в стандартный вывод (или любой файлоподобный объект через file=).

1
print("a", "b", sep="-", end="!\n")
1
a-b!

Используйте sep, end и file, чтобы управлять форматированием, вместо того чтобы собирать строки вручную перед выводом.

input()

Читает строку текста со стандартного ввода, опционально показывая приглашение.

1
name = input("Name: ")
1
Name: (waits for user input, returns the typed string)

Всегда возвращает str — приводите явно через int()/float(), если нужно число.

open()

Открывает файл и возвращает файловый объект; почти всегда используется вместе с блоком with.

1
2
with open("example.txt", "w") as f:
    f.write("hello")
1
(writes "hello" to example.txt)

Всегда используйте with open(...) as f: — это гарантирует закрытие файла даже при возникновении исключения.

format()

Форматирует одно значение согласно спецификации формата — механизм, лежащий в основе f-строк.

1
print(format(3.14159, ".2f"), format(255, "#x"))
1
3.14 0xff

Для всего, что сложнее одного значения, f-строка (f"{x:.2f}") обычно понятнее прямого вызова format().

eval()

Вычисляет строку как выражение Python и возвращает результат.

1
print(eval("2 + 3 * 4"))
1
14

Подвох: никогда не вызывайте eval() на недоверенных данных — она выполняет произвольный код с полными правами интерпретатора.

exec()

Выполняет строку как инструкции Python — надмножество eval(), без возвращаемого значения.

1
exec("x = 5\nprint(x * 2)")
1
10

То же предупреждение о безопасности, что и для eval(), только вдвойне — exec() может определять функции, классы и импорты.

help()

Запускает интерактивную систему справки Python для модуля, функции или объекта.

1
help(str.strip)
1
(prints the docstring for str.strip in an interactive pager)

Лучше всего использовать в сессии REPL; в скриптах предпочитайте чтение документации напрямую.

globals()

Возвращает изменяемый словарь глобального пространства имён текущего модуля.

1
2
x = 1
print("x" in globals())
1
True

Изменение словаря, возвращаемого globals(), действительно меняет глобальные переменные — мощно и опасно.

locals()

Возвращает словарь-снимок текущего локального пространства имён.

1
2
3
4
def f():
    y = 10
    print(locals())
f()
1
{'y': 10}

Подвох: внутри функции изменение словаря из locals() не гарантированно обновляет локальные переменные — CPython трактует его как снимок.

import()

Низкоуровневая функция, которую под капотом вызывает инструкция import.

1
2
math = __import__("math")
print(math.sqrt(16))
1
4.0

В реальном коде используйте importlib.import_module() вместо неё — __import__() существует в основном для нужд самого интерпретатора.

Помощники для ООП

property()

Свойство (property) в Python — это управляемый атрибут: property() превращает метод в нечто, читаемое обычным синтаксисом обращения к атрибуту, обеспечивая вычисляемые значения с доступом в стиле атрибута.

1
2
3
4
5
6
7
8
class Circle:
    def __init__(self, r):
        self.r = r
    @property
    def area(self):
        return 3.14159 * self.r ** 2

print(Circle(2).area)
1
12.56636

Используйте property, чтобы добавить проверку или вычисляемые значения к атрибуту, не ломая существующие места вызова obj.attr.

staticmethod()

Помечает метод, который не получает self или cls — по сути, обычную функцию, помещённую в пространство имён класса.

1
2
3
4
5
6
class Math:
    @staticmethod
    def add(a, b):
        return a + b

print(Math.add(2, 3))
1
5

Используйте, когда метод логически принадлежит классу, но никогда не обращается к состоянию экземпляра или класса.

super()

Возвращает прокси-объект для вызова методов родительского или соседнего класса — необходим для совместного множественного наследования.

1
2
3
4
5
6
7
8
9
class Animal:
    def speak(self):
        return "..."

class Dog(Animal):
    def speak(self):
        return super().speak() + " Woof!"

print(Dog().speak())
1
... Woof!

Всегда предпочитайте super() жёсткому указанию имени родительского класса — она корректно следует порядку разрешения методов (MRO) в иерархиях с множественным наследованием.

Сводная таблица

КатегорияФункции
Числа и математикаabs, bin, divmod, pow, round, hex, oct, float, int
Итерируемые объекты и последовательностиany, all, enumerate, zip, map, filter, sorted, reversed, range, len, sum, min, max, iter, next, slice
Конструкторы типовbool, bytes, bytearray, str, list, dict, set, frozenset, tuple, memoryview, object
Интроспекция и атрибутыtype, isinstance, issubclass, callable, dir, vars, hasattr, getattr, setattr, id, hash, repr, ascii, oct, ord, chr
Выполнение кода и ввод-выводprint, input, open, format, eval, exec, help, globals, locals, __import__
Помощники для ООПproperty, staticmethod, super

Что изучать дальше

Освоив набор встроенных функций, логичный следующий шаг — применить его в реальных пайплайнах данных и AI. Если вы работаете с чем-то, что затрагивает большие модели локально, посмотрите Quantization for LLMs: Run Big Models on Small Hardware — многие функции из этого руководства (bytes, memoryview, работа с буферами) постоянно встречаются при работе с тензорными данными. Если вы оцениваете пайплайны retrieval, Building a RAG Evaluation Pipeline with Python активно опирается на zip(), enumerate() и sorted() для подсчёта оценок и ранжирования результатов. А если следующим в вашем списке идёт асинхронный код, экосистема async в Python строится непосредственно поверх протокола итераторов, который раскрывают эти встроенные функции — iter() и next() это тот самый механизм, который под капотом использует async for.

Khushal Jethava
Khushal Jethava

Machine Learning Engineer at Codiste, specializing in Generative AI, NLP, and Computer Vision. Building production AI systems with Python.

🚀 Find Better AI Tools Faster Submit Your AI Tool & Reach Thousands of Builders Get Started →
This post is licensed under CC BY 4.0 by the author.
🚀 Find Better AI Tools Faster Submit Your AI Tool & Reach Thousands of Builders Get Started →
🚀 Find Better AI Tools Faster Submit Your AI Tool & Reach Thousands of Builders Get Started →