Реальный Код
17
подписчиков
Программирование на практике: советы, идеи, приемы. Реальная разработка на примерах от профессионала.
Приёмчики в коде
Хочу сегодня поделиться с вами элегантным приемом для оформления обработки ошибок для разных действий. Это код из проекта openpyxl. Вот ссылка на конкретный участок кода https://foss.heptapod.net/openpyxl/openpyxl/-/blob/branch/3.1/openpyxl/reader/excel.py#L285 Итак, что мы видим: 1. заключаем наши повторяющиеся действия с разным названием в try/catch секцию 2. каждому действию (вызову функции) предшествует название действия (action) 3...
Считаем возраст юзера [python + datetime]
В прошлый раз мы уже написали скрипт для генерации рандомного пользователя. Сегодня улучшим его, добавив возраст пользователя. Тут все достаточно просто: 1️⃣ рандомную дату рождения мы получали и раньше, сейчас же мы просто начнем ее использовать 2️⃣ формат даты нам известен и не меняется, однако приходит в виде строки!, потому с использованием функции `datetime.strptime()` из пакета `datetime` переводим ее в объект даты, чтобы работать с датой было удобнее...
Прогресс бар на питоне [python + tqdm + random]
А вот как можно добавить визуализацию прогресса в ваш скрипт. В этом случае пользователь будет видеть прогресс бар, бегущий от 0% до 100%, а кроме того, примерное время до окончания процесса. Это особенно полезно в случае длительной обработки, либо же при обработке большого количества элементов, ну или все вместе. Из интересных моментов в скрипте хочу отметить использование пакета random...
Генерируем рандомного юзера [requests + API]
Сегодня покажу вам код в 8 (восемь!) строк для генерации пользователя со случайным именем, фамилией и телефоном. Конечно, мы могли бы распарсить статьи в Википедии и получить список популярных имен и фамилий, и написать код рандомной генерации сами. Но это мы оставим на потом, а сегодня воспользуемся...
Пишем функцию генерации пароля на Python
Внимание! Данная функция не обеспечивает должной безопасности. Не рекомендуется использовать ее в реальных проектах для генерации паролей. Сегодня разберем короткую и удобную функцию для генерации паролей, IDшников или рандомных имен файлов. Вы также можете использовать ее для своих нужд генерации случайных строк. import random import string def gen_rand_str(length: int) -> str: return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(0, length)) Разложим ее на составные части: >>> string.ascii_letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.digits '0123456789' >>> string...
Поиск функции по кодовой базе
Сегодня поделюсь с вами командой, которая позволяет легко и быстро найти нужную вам функцию по всей вашей кодовой базе. В моем случае мне нужно найти мою реализацию очереди на Питоне, которую я когда-то делал, но не помню, в каком проекте. Для этого я использовал следующую команду: find ~/repos -name "*.py" | xargs grep -i "queue” Разберем ее по частям: Для удобства, мы можем использовать следующие варианты команды. Вывести все найденные строки в файл: find ~/repos -name "*...
Формат времени и даты
Сегодня расскажу вам о стандарте представления времени и дат, который часто используется в разработке. Стандарт этот именуется ISO 8601. Почему важно знать о нем? Потому что он часто используется при разработке ПО: хранение логов, передача дат в JSON, хранение даты и времени в базе данных и так далее. В нем описан не только стандартизированный (то есть единый) формат записи даты и времени как таковой, но и учтен формат записи часового пояса. А это крайне важная вещь при разработке ПО, которое потенциально может работать либо распределенно, либо на компьютерах по всему миру. Стандарт поддерживается...
Свой веб-сервер за минуту
Знали ли вы, что в стандартной поставке Питона есть модуль, который позволяет поднять веб-сервер за считанные секунды прямо “из коробки”? Модуль называется http.server и вот как им пользоваться: Теперь мы можем вбить в браузере адрес http://localhost:8000 и удостовериться, что все работает – мы увидим список файлов в нашей папке, плюс, сможем их скачать...
Раскрашивание текста в print()
Вывод в терминал / консоль / командную строку можно оформлять цветом. Для этого используются специальные последовательности символов. Эта же функциональность доступна и в Питоне. Вот эти последовательности спец. символов. Для выделений текста цветом: \033[0;30m - черный \033[0;31m - красный \033[0;32m - зеленый \033[0;33m - желтый \033[0;34m - синий \033[0;35m - фиолетовый \033[0;36m - бирюзовый \033[0;37m - белый Чтобы покрасить фон текста: \033[40m - черный...
Объясняю про коллбэки на пальцах
Коллбэк (callback) – это обычная функция, но которая должна быть вызвана при каком-то событии. Для этого мы передаем наш коллбэк в некоторую функцию. Эта функция потом просто вызовет нашу функцию-коллбэк, которую мы ей передали. Аналогия: мы звоним в клинику, а там нам отвечают, что все операторы заняты, и предлагают оставить свой номер, чтобы они перезвонили. Это и есть пример коллбэка (с английского, кстати, так дословно и переводится – перезвонить обратно или обратный вызов). То есть мы оставили номер, на который нужно перезвонить, когда освободится оператор...
Получаем информацию о системе + версию Питона
В Питоне есть несколько стандартных пакетов, которые позволяют получить информацию об операционной системе и версии Питона. Мы будем использовать platform для получения информации о системе и sys для получения версии Питона (потому что она дым выдается отдельными числами для минорной, мажорной и патч версий, тогда как в пакете platform функция python_version() возвращает строку. Основные используемые функции:...
Форматированные строки в Питоне (f-строки, f-strings)
Данный функционал появился в версии 3.6, и позволяет визуально улучшить оформление текстовых строк, тем самым увеличив читабельность кода. Как было раньше: name = 'Федя'
print('Привет, %s' % name) На первый взгляд, все просто и понятно. Но с двумя аргументами запись уже выглядит громоздко: print('Дата: %02d:%02d' % (day, month)) Кроме того, реальные проблемы могут начаться, когда у вас выражение чуть сложнее. Например: module_name = 'database'
line_number = 103
error_string = 'отсутствует соединение с базой данных'
error_code = 2883
print('Ошибка в модуле %s, строка %d: %s (код ошибки %d)' % (module_name,...