Встроенные функции Python: инструментальный ящик
Десятки функций лежат в Python наготове: len, sum, min, max, abs, round, enumerate, zip, input. Обзор инструментального ящика — что чем открывать.
Редакция Питоники
Половина раздела ушла на то, чтобы создавать функции самому: def, return, аргументы, звёздочки. Но главный источник функций — сам Python: язык приходит с десятками готовых инструментов, которые не нужно ни объявлять, ни импортировать. Вы уже пользовались частью ящика, не задумываясь: len, print, range. Встроенные функции уже находятся внутри Python: их не импортируют и не объявляют — просто вызывают по имени. Пройдёмся по ящику полка за полкой и соберём рабочий минимум.
len и sum: размер и сумма
Эти две вы уже видели десятки раз — теперь на их примере видно, как устроен ящик: функция получает данные аргументом и возвращает результат.
cart = [120, 80, 35]
print(len(cart))
print(sum(cart))
print(sum(cart, 100))
print(len('Python'))
3 235 335 6
len работает с любым набором, у которого есть размер: списком, строкой, кортежем, словарём. sum складывает числа, а её второй аргумент — стартовая величина: здесь к сумме корзины прибавились сто стартовых баллов. Второй аргумент не обязателен: без него сложение начнётся с нуля.
int, float и str: перевод типов
Имена типов тоже работают как функции — вызов конвертирует значение. Это нужно постоянно: например, числа приходят строками из файлов, а дробь нужно показать строкой.
print(int('42') + 8)
print(float('3.5') * 2)
print(str(99) + '!')
50 7.0 99!
int('42') превратила строку в число, и сложение стало возможным: без перевода '42' + 8 упало бы с ошибкой типов — строка с числом не складывается. float('3.5') дала дробь, а str(99) позволила приклеить число к строке. Обратная сторона: int('привет') упадёт с ValueError — переводить нужно то, что действительно похоже на число.
min и max: крайние значения
Крайние значения набора — самые частые вопросы о данных: где минимум цены, где максимум оценки. И у этих функций есть тот самый параметр key, который вы знаете по sorted:
numbers = [12, 7, 30, 9]
print(min(numbers), max(numbers))
words = ['сад', 'водопровод', 'дом']
print(min(words, key=len))
print(max(words, key=len))
7 30 сад водопровод
Без key min и max сравнивают элементы напрямую — числа с числами, строки с строками по кодам символов. Правило key=len сказало: сравнивай не слова, а их длины — и минимумом оказалась короткая «сад», максимумом — «водопровод». То же правило подойдёт парам и словарям: min(pairs, key=lambda p: p[1]) найдёт пару с наименьшей ценой.
abs и round: модуль и округление
print(abs(-7))
print(abs(3 - 10))
print(round(3.14159, 2))
print(round(8.9871, 2))
7 7 3.14 8.99
abs возвращает модуль — расстояние до нуля без знака, чем пользуются при сравнении отклонений: разница двух показателей важна по величине, а не по направлению. round округляет: второй аргумент — число знаков после запятой, без него — до целого. С округлением связана тонкость, о которой стоит знать заранее:
enumerate и zip: пары без индексной возни
Две функции из курса циклов — здесь просто напоминание, что они тоже из ящика. enumerate выдаёт пары номер — значение, zip идёт по нескольким спискам параллельно:
words = ['раз', 'два', 'три']
for i, w in enumerate(words, start=1):
print(i, w)
names = ['Анна', 'Борис']
marks = [5, 4]
print(list(zip(names, marks)))
1 раз
2 два
3 три
[('Анна', 5), ('Борис', 4)]input: спросить у человека
Единственная функция в этом обзоре, которая не запустится в песочнице страницы: она ждёт ввода с клавиатуры.
name = input('Как вас зовут? ')
age = input('Сколько вам лет? ')
print(f'{name}, через год вам будет {int(age) + 1}')
Отсюда рабочее правило: всё, что пришло от человека, — строка. Число из ввода получают переводом int(...) или float(...), и нечисловой ввод уронит перевод с ValueError — проверку ввода через isdigit разбирает урок про проверки строки.
dir и help: узнать самому
Ящик больше, чем любой урок, и в нём есть инструменты для осмотра самого ящика. dir показывает имена, которые даёт модуль или объект, help — справку по конкретной функции:
import math
print(dir(math))
| Функция | Что делает | Пример |
|---|---|---|
| len | Размер набора | len('Python') — 6 |
| sum | Сумма чисел | sum([1, 2, 3], 10) — 16 |
| min / max | Крайние значения, с key — по правилу | min(words, key=len) |
| abs | Модуль числа | abs(-7) — 7 |
| round | Округление | round(3.14159, 2) — 3.14 |
| int / float / str | Перевод типов | int('42') — 42 |
| enumerate | Пары номер — значение | enumerate(words, start=1) |
| zip | Несколько списков параллельно | zip(names, marks) |
| input | Строка от человека | input('Имя: ') |
| any / all | Есть ли хоть один, все ли | all(p > 0 for p in prices) |
| isinstance | Проверка типа, в том числе по кортежу типов | isinstance(x, (int, str)) |
| ord / chr | Символ и его код | ord('A') — 65 |
| pow | Степень числа | pow(2, 10) — 1024 |
| divmod | Частное и остаток сразу | divmod(17, 5) — (3, 2) |
| dir / help | Осмотр объектов и справка | help(abs) |
Финальный проход по полке: короткий отчёт об оценках, где каждая строка — вызов одной функции из ящика.
marks = [4, 5, 3, 5, 4]
print('Работ:', len(marks))
print('Сумма:', sum(marks))
print('Средний:', sum(marks) / len(marks))
print('Мин и макс:', min(marks), max(marks))
Работ: 5 Сумма: 21 Средний: 4.2 Мин и макс: 3 5
Все эти функции принимали в аргументах данные. Но функции в Python можно передавать и функции — именно так работают key у sorted и min: мы отправляли в аргумент не число, а правило. Об этом шаге — передача функции как значение — следующий урок.
any и all: ответ да или нет
Про данные часто спрашивают не «какие», а «есть ли»: есть ли хоть один заказ крупнее тысячи, все ли оценки выше трёх. Для таких вопросов в ящике есть две функции: any спрашивает «есть ли хоть один», all — «все ли».
prices = [120, 80, 35]
print(any(p > 100 for p in prices))
print(all(p > 0 for p in prices))
print(all(p > 50 for p in prices))
True True False
Выражения в скобках — генераторы: они передают элементы по одному, и any или all забирают их, пока не станет ясен ответ. Функции короткозамкнутые: any останавливается на первом True, all — на первом False. Если проверка дорогая, это заметно экономит время. Без генераторов any и all прекрасно работают и с обычным списком: any([False, True]) даст True.
type и isinstance: что перед нами
Ещё один частый вопрос к данным — какого они типа. type называет тип, isinstance проверяет принадлежность к нему. Второй полезнее: он понимает наследование и принимает сразу несколько типов.
value = 42
print(type(value))
print(isinstance(value, int))
print(isinstance(value, str))
print(isinstance('текст', (int, str)))
<class 'int'> True False True
Кортеж в последней строке означает «любой из этих типов». Сравнивать type(x) == int не стоит: True — тоже целое число в Python, isinstance(True, int) даст True, а вот type(True) — это bool, и строгое сравнение вернёт False. Для проверок используйте isinstance.
Ещё несколько с полки
print(ord('A'))
print(chr(65))
print(pow(2, 10))
print(divmod(17, 5))
65 A 1024 (3, 2)
ord и chr переводят символ в его код и обратно — пригодится, когда сортируете по кодам символов, как в уроке про sorted. pow считает степень, а divmod отдаёт сразу частное и остаток от деления — экономнее, чем делать два отдельных деления.
Практика: разбор строки заказа
Соберём ящик в дело: превратим строку заказа в список и получим по нему несколько ответов.
order = 'хлеб, молоко, сыр'
items = order.split(', ')
print('позиций:', len(items))
print('самая длинная:', max(items, key=len))
позиций: 3 самая длинная: молоко
Метод split разделил строку и вернул список, а дальше с ним поработали обычные встроенные функции: len посчитал количество, max с правилом key=len нашёл самую длинную позицию. Ни одной собственной функции не понадобилось — ровно тот случай, ради которого ящик и существует.
Сначала предскажи ответ в голове — это главный навык программиста.
print(abs(-5) + len('ок'))
values = [8, 3, 5]
print(min(values), max(values), sum(values))
print(round(3.14159, 2), round(2.5))
1. Что вернёт len('Python')?
2. Что вернёт sum([1, 2, 3], 10)?
3. Что вернёт min(['сад', 'водопровод'], key=len)?
4. Что вернёт round(2.5)?
5. Что произойдёт при вызове max([])?
6. Что всегда возвращает input, даже если человек ввёл число?
7. Что вернёт any([False, False, False])?
8. Что вернёт isinstance(True, int)?
9. Что вернёт divmod(17, 5)?
Дан список оценок marks = [5, 5, 4, 3, 4]. Напечатай три строки: количество оценок, их сумму и средний балл, округлённый до двух знаков через round.
Какие встроенные функции Python нужны чаще всего?
Рабочий минимум: len и sum для размеров и сумм, min и max для крайних значений (с key — по правилу), abs и round для модуля и округления, enumerate и zip для пар, int, float и str для перевода типов. Всё это вызывается по имени без import — встроенные функции уже внутри языка.
Урок 13: функция как значениеПочему input всегда возвращает строку и как получить число?
input читает ввод как текст: даже «12» приходит строкой '12'. Для арифметики переводят int(age) или float(price); нечисловой ввод уронит перевод с ValueError, поэтому ввод проверяют — например, методом isdigit.
Урок: проверки строки — isdigit, isalphaЧем round отличается от int при работе с дробями?
int(2.9) отбрасывает дробную часть и даёт 2, int(-2.9) даёт -2 — отсечение к нулю. round округляет к ближайшему, но половины идут к ближайшему чётному: round(2.5) — это 2, round(3.5) — это 4. Для предсказуемого отображения денег удобнее формат f-строки f'{x:.2f}'.
Как посмотреть список функций модуля и справку по функции?
dir(модуль) показывает все имена, которые даёт модуль, help(имя) печатает справку по функции — сигнатуру и описание. Оба работают прямо в консоли Python и экономят походы в документацию, когда забыл точное имя или порядок аргументов.
Чем any отличается от all?
any спрашивает, есть ли в наборе хоть один подходящий элемент, all — подходят ли все. Обе короткозамкнутые: any останавливается на первом True, all — на первом False. Ответ всегда один: True или False.
Как проверить тип значения в Python?
Через isinstance: isinstance(value, int). Функция понимает наследование и принимает кортеж типов: isinstance(value, (int, str)). Сравнивать type(value) == int не стоит — логический тип тогда не пройдёт проверку.
Что делает divmod?
Возвращает сразу частное и остаток от деления: divmod(17, 5) даёт (3, 2). Это экономит одно деление, когда нужны оба значения, — удобно для разбора времени на часы и минуты или для деления текста на страницы.
Понравился урок? Сошлитесь на него
«Встроенные функции уже находятся внутри Python: их не импортируют и не объявляют — просто вызывают по имени.»
Скопируйте готовую ссылку в формате HTML, Markdown или чистый адрес и вставьте в статью на Habr, VC, Telegram-канал или свой блог — так о проекте узнают новые читатели.
Что дальше
Осталось в разделе: 20 из 20. Прогресс хранится в вашем браузере.
Что читать дальше
Функции · Урок 13
Функция как значение в Python: передача функций
map и sorted уже принимали функции в аргументах — теперь разберём приём целиком: функция такое же значение, как число или строка.
Циклы · Урок 4
enumerate в Python: индекс и значение вместе
Нужен номер элемента вместе с самим элементом? enumerate отдаёт циклу пары «индекс — значение»: без ручного счётчика и с нумерацией с единицы через start=1.
Циклы · Урок 10
zip в Python: несколько последовательностей параллельно
Два списка идут параллельно: имена и баллы, товары и цены. zip склеивает их в пары, цикл берёт по одной — без индексов и range(len(...)).
Похожие уроки по темам
Подобраны автоматически по пересечению тем и ключевых слов.
json · Урок 19
Мини-клиент API на функциях
URL, разбор ответа, фильтр, файл — каждый шаг уже умещается в одну функцию. Собираем их в клиент, который читается как сценарий.
python клиент api функциифункции python для обработки json
asyncio · Урок 2
Первая корутина: async def и await
async def — функция с паузами, await — «дождись результата». Звучит просто, пока не выясняется, что вызов async-функции не выполняет её тело. Разбираем оба ключевых слова на живом коде.
async функция pythonасинхронные функции python
Функции · Урок 18
docstring в Python: документация внутри функции
Документация живёт внутри функции: строка в тройных кавычках после def, атрибут __doc__ и честный формат короткого описания.
python документация функцииpython help функция