Перейти к содержанию

412 уроков, 25 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение
Урок 12 из 20 Начальный 15 мин 100 XP

Встроенные функции 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:

крайние значения и правило key
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}')
Блок не запускается в браузерной песочнице: input читает клавиатуру, и запуск повиснет в ожидании ввода. Выполняйте такой код в локальной консоли. Важно: input всегда возвращает строку — даже если человек ввёл 12, это строка '12', поэтому перед арифметикой её переводят int(age).

Отсюда рабочее правило: всё, что пришло от человека, — строка. Число из ввода получают переводом int(...) или float(...), и нечисловой ввод уронит перевод с ValueError — проверку ввода через isdigit разбирает урок про проверки строки.

dir и help: узнать самому

Ящик больше, чем любой урок, и в нём есть инструменты для осмотра самого ящика. dir показывает имена, которые даёт модуль или объект, help — справку по конкретной функции:

осмотр модуля
import math
print(dir(math))
Вывод — длинный список строк-имён: константы вроде pi, функции вроде sqrt и ceil. Его удобно смотреть в локальной консоли, а справку по конкретной функции даёт help(abs) — в песочнице справочные тексты показываются сокращённо.
ФункцияЧто делаетПример
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.

Ещё несколько с полки

ord, chr, pow, divmod
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))
Проверь себя
0 / 9

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)?

Карточки терминов
Запомнено: 0 / 9
Практика

Дан список оценок marks = [5, 5, 4, 3, 4]. Напечатай три строки: количество оценок, их сумму и средний балл, округлённый до двух знаков через round.

practice.py
Вопросы и ответы по уроку

Какие встроенные функции 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-канал или свой блог — так о проекте узнают новые читатели.

TelegramVK

Что дальше

Осталось в разделе: 20 из 20. Прогресс хранится в вашем браузере.

Похожие уроки по темам

Подобраны автоматически по пересечению тем и ключевых слов.