Читать книгу Быстрый Python. автоматизация рутинных задач за неделю - - Страница 5

Часть 1. Основы Python для автоматизации
Функции

Оглавление

До сих пор мы писали скрипты как линейную последовательность команд: сверху вниз, строка за строкой. Это работает, пока задача маленькая и умещается на одном экране. Но представьте, что вы убираете квартиру. Вы можете ходить из комнаты в комнату и делать одно и то же: взять тряпку, намочить ее, протереть пол, прополоскать тряпку. А можно один раз описать этот процесс, назвать его, например, ‘помыть пол’, а потом просто говорить себе: ‘помыть пол в кухне’, ‘помыть пол в спальне’. Суть не меняется, но мыслей и повторений становится меньше. В программировании такие упакованные процессы называются функциями.

Функция – это не что иное, как именованный блок кода, который выполняет определенную задачу. Вы пишете этот блок один раз, даете ему понятное имя, а потом можете использовать (или, как говорят программисты, вызывать) его сколько угодно раз в разных частях вашей программы. Это как волшебный ящик. Вы кладете внутрь что-то (или ничего), нажимаете кнопку с именем ящика, а он выдает результат. Самое главное – вам не нужно каждый раз заглядывать внутрь и проверять, как там шестеренки крутятся. Вы просто пользуетесь им.

Как устроена функция

Создание функции в Python начинается с волшебного слова def. Это сокращение от define, то есть определить. После него пишется имя функции, круглые скобки, и в конце ставится двоеточие. Все, что относится к функции, пишется с отступом (обычно четыре пробела) ниже. Давайте создадим нашу первую, очень простую функцию, которая просто печатает приветствие.

def поздороваться(): print(‘Привет, мир автоматизации!’)

Обратите внимание на скобки после имени функции. Сейчас они пустые. Это значит, что наша функция не принимает никаких входных данных. Она как автомат, у которого только одна кнопка: нажал – получил стандартный результат. Чтобы заставить эту функцию работать, ее нужно вызвать. Для этого достаточно написать ее имя с теми же скобками. Вот так: поздороваться(). И в консоли появится наше сообщение. Вы можете написать эту строчку в коде десять раз подряд, и сообщение выведется десять раз, но сам код функции, ее описание, у вас будет записано всего один раз. Уже чувствуете, как это экономит силы и место?

А теперь представьте, что вам нужно не просто печатать одно и то же приветствие, а обращаться к разным людям или программам. Тут нам на помощь приходят параметры. Параметры – это те самые входные данные, которые мы кладем в наш волшебный ящик. Мы объявляем их в тех самых круглых скобках при создании функции. Давайте улучшим нашу функцию.

def поздороваться_по_имени(имя): print(‘Привет,’, имя, ‘! Добро пожаловать в мир автоматизации!’)

Теперь, когда мы будем вызывать эту функцию, мы обязаны указать в скобках то значение, которое будет подставлено вместо слова ‘имя’ внутри функции. Например, поздороваться_по_имени(‘Алексей’) или поздороваться_по_имени(‘Excel-таблица’). Функция станет гораздо более гибкой и полезной.

Функции, которые что-то возвращают

Часто нам нужно не просто что-то сделать (например, напечатать текст), а получить какой-то результат для дальнейшей работы. Представьте калькулятор. Вы вводите два числа и нажимаете кнопку ‘плюс’. Калькулятор не просто пишет результат на экране – он его вычисляет и отдает вам. В мире функций за это отвечает ключевое слово return (что переводится как вернуть).

Создадим функцию, которая принимает два числа и возвращает их сумму.

def сложить(а, b): результат = а + b return результат

Что здесь происходит? Функция получает два числа (их значения будут подставлены вместо а и b). Внутри она создает переменную ‘результат’, куда записывает сумму. И затем команда return отправляет значение этой переменной туда, откуда функцию вызвали. Это важно понять. Сама по себе функция сложить(5, 3) в коде ничего не напечатает. Она просто вычислит число 8 и вернет его. А что с этим числом делать дальше – решаете вы. Можно сразу напечатать: print(сложить(5, 3)). Можно сохранить в переменную для будущих расчетов: мой_результат = сложить(5, 3). А можно даже передать это число в другую функцию. Возвращаемое значение – это и есть главный продукт, который производит наш волшебный ящик.

Зачем это нужно в автоматизации

Теперь давайте спустимся с небес теории на землю практики. Вспомните любую свою рутинную задачу. Например, ежемесячное составление отчета. В нем всегда одни и те же шаги: взять данные из одного файла, очистить их от лишних строк, посчитать итоги по столбцам, оформить в красивую таблицу и сохранить в новом файле. Каждый из этих шагов – идеальный кандидат в функцию. Вы пишете функцию ‘взять_данные_из_файла’, функцию ‘очистить_данные’, функцию ‘посчитать_итоги’. Ваш основной скрипт при этом превращается из длинного, запутанного текста в чистый и понятный план:

данные = взять_данные_из_файла(‘отчет_май.csv’) чистые_данные = очистить_данные(данные) итоги = посчитать_итоги(чистые_данные) сохранить_отчет(итоги, ‘итоговый_отчет_май.xlsx’)

Выглядит, как инструкция на человеческом языке, не правда ли? А самое прекрасное происходит, когда на следующий месяц вам нужно сделать то же самое, но с файлом ‘отчет_июнь.csv’. Вам не нужно переписывать весь скрипт! Вы просто меняете имя входного файла в первой строке. Вся сложная логика спрятана внутри функций, которые уже написаны и проверены. Если вы найдете ошибку в очистке данных, вам нужно будет исправить ее только в одном месте – внутри функции ‘очистить_данные’, и она автоматически поправится во всех ваших скриптах, где эта функция используется.

Подумайте на минутку о своих повторяющихся действиях за компьютером. Может, это переименование фотографий по шаблону ‘отпуск_2024_01.jpg’? Или еженедельная рассылка писем с одним и тем же текстом, но разными именами в адресной строке? Каждое такое действие – это готовая функция, которая только ждет, когда вы ее опишете. Вы уже чувствуете, как ваш будущий скрипт обретает структуру, становясь не грудой команд, а набором осмысленных блоков?

Немного магии: аргументы по умолчанию

Иногда вашей функции нужны не все данные каждый раз. Некоторые параметры могут быть стандартными, наиболее часто используемыми. Python позволяет задавать для параметров значения по умолчанию. Синтаксис прост: в объявлении функции вы пишете параметр со знаком равенства и значением. Например, функция создания папки. Обычно вы создаете ее в текущей директории, но иногда нужно указать другой путь.

def создать_папку(имя_папки, родительский_путь=‘.’): полный_путь = os.path.join(родительский_путь, имя_папки) os.mkdir(полный_путь)

Здесь ‘.’ – это условное обозначение текущей папки. Теперь, если вы вызовете функцию как создать_папку(‘НоваяПапка’), она создаст папку ‘НоваяПапка’ прямо там, где находится ваш скрипт. Но если вам нужно создать ее где-то еще, вы можете явно указать второй аргумент: создать_папку(‘НоваяПапка’, ‘C:/Документы’). Это невероятно удобно, так как делает функции еще более гибкими и умными, избавляя вас от необходимости постоянно указывать очевидные вещи.

Функции – это краеугольный камень, на котором строится не только автоматизация, но и все программирование в целом. Они превращают хаос операций в порядок, повторяющееся – в однократное, сложное – в простое. Не стремитесь сразу написать идеальную, универсальную функцию на все случаи жизни. Начните с малого. Выделите в вашем следующем скрипте хотя бы один повторяющийся кусок кода, оберните его в def, дайте честное имя. Вы удивитесь, насколько понятнее и короче станет ваш код. И помните, каждая новая функция – это еще один кирпичик в стене, которая защищает ваше время от нашествия рутины.

Быстрый Python. автоматизация рутинных задач за неделю

Подняться наверх