Forwarded from Python 🇺🇦
Відловлюємо помилки за допомогою assert
Інструкція
Якщо виконати інструкцію
Однак не потрібно намагатися обробити виняток
У прикладі ми перевірили, чи є переданий аргумент числовим типом даних. Якщо ні, то буде викликано виняток та виведено вказане повідомлення.
#practice // Python 🇺🇦
Інструкція
assert приймає логічний вираз та необов'язкове повідомлення. Вона використовується для перевірки типів, значень аргументу та виведення функції, а також для налагодження, оскільки зупиняє програму у разі помилки.Якщо виконати інструкцію
assert з логічним виразом, результат якого дорівнює True, нічого не станеться. Але у випадку з False буде згенеровано виняток AssertionError.Однак не потрібно намагатися обробити виняток
AssertionError блоком try-except. У такому разі assert втрачає свій сенс.У прикладі ми перевірили, чи є переданий аргумент числовим типом даних. Якщо ні, то буде викликано виняток та виведено вказане повідомлення.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Розділюємо цілі числа
Важко візуально розрізнити цілі числа подібні
Але Python дозволяє використовувати нижнє підкреслення як роздільник для покращення читабельності.
Наприклад,
#practice // Python 🇺🇦
Важко візуально розрізнити цілі числа подібні
10000000 та 100000000. Використовувати коми, як в англійській мові, не вийде.Але Python дозволяє використовувати нижнє підкреслення як роздільник для покращення читабельності.
Наприклад,
1_000_000 інтерпретуватиметься як ціле число 1000000.#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Дізнаємося кодування тексту
Думаю, у всіх були ситуації, коли ви відкрили файл або отримали відповідь від сервера, а всередині виявлявся набір дивних символів у незрозумілому кодуванні.
Пакет
У прикладі на картинці ми отримали відповідь на запит до сервера, взяли його вміст і перевірили кодування через цей метод.
#practice // Python 🇺🇦
Думаю, у всіх були ситуації, коли ви відкрили файл або отримали відповідь від сервера, а всередині виявлявся набір дивних символів у незрозумілому кодуванні.
Пакет
chardet був створений для роботи з кодуванням. Його метод detect видає передбачуване кодування з точністю від 0 до 1.У прикладі на картинці ми отримали відповідь на запит до сервера, взяли його вміст і перевірили кодування через цей метод.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Тимчасові файли
У стандартній бібліотеці Python є модуль
Функція
Створений тимчасовий файл буде видалено автоматично після закриття файлу або при виході з контекстного менеджера.
Також інші процеси та програми не зможуть отримати доступ до цього тимчасового файлу.
#practice // Python 🇺🇦
У стандартній бібліотеці Python є модуль
tempfile, який містить класи та методи для коректної роботи з тимчасовими файлами та директоріями.Функція
TemporaryFile створює тимчасовий файл у системній директорії та повертає файлоподібний об'єкт.Створений тимчасовий файл буде видалено автоматично після закриття файлу або при виході з контекстного менеджера.
Також інші процеси та програми не зможуть отримати доступ до цього тимчасового файлу.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Підключаємося до сервера по ssh
Пакет
Використовувати модуль досить просто, приклад основних методів на зображенні вище. До речі, цікавий факт, Paramiko - це поєднання слів "параноїк" та "друг" мовою есперанто.
Встановлюється пакет звичним чином через пакетний менеджер pip. Документацію можна переглянути тут.
#practice // Python 🇺🇦
Пакет
paramiko дозволяє встановлювати з'єднання з віддаленими машинами за протоколом SSH2 і робити там ті самі операції, якби ви підключалися через, наприклад, утиліту ssh на лінуксі.Використовувати модуль досить просто, приклад основних методів на зображенні вище. До речі, цікавий факт, Paramiko - це поєднання слів "параноїк" та "друг" мовою есперанто.
Встановлюється пакет звичним чином через пакетний менеджер pip. Документацію можна переглянути тут.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Завантажуємо відео з YouTube
Пакет
Для роботи нам необхідно створити об'єкт класу YouTube. Крім посилання на відео в конструктор можна передати у якості параметрів функції для обробки прогресу завантаження та завершення.
Більшість відео на ютубі не мають аудіодоріжки на потоках з високою роздільною здатністю, понад 720p — це пов'язано з технологією передачі DASH, яку використовує сервіс. Про вирішення цього нюансу поговоримо трішки пізніше.
На картинці показано, як відфільтрувати потоки з прогресивною передачею і вибрати з отриманого списку з максимальною доступною роздільною здатністю до 720p.
Для завантаження вибраного потоку використовуємо функцію
#practice // Python 🇺🇦
Пакет
pytube надає всю необхідну функціональність для завантаження відео з YouTube, а також для збирання всієї інформації про нього.Для роботи нам необхідно створити об'єкт класу YouTube. Крім посилання на відео в конструктор можна передати у якості параметрів функції для обробки прогресу завантаження та завершення.
Більшість відео на ютубі не мають аудіодоріжки на потоках з високою роздільною здатністю, понад 720p — це пов'язано з технологією передачі DASH, яку використовує сервіс. Про вирішення цього нюансу поговоримо трішки пізніше.
На картинці показано, як відфільтрувати потоки з прогресивною передачею і вибрати з отриманого списку з максимальною доступною роздільною здатністю до 720p.
Для завантаження вибраного потоку використовуємо функцію
download(), в функцію можна передати у якості параметрів шлях до директорії для збереження та ім'я файлу.#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Об'єднуємо відео та аудіо потоки
Через технологію потокової передачі DASH (Dynamic Adaptive Streaming over HTTP), яка використовується youtube, ми не можемо отримати відразу відео в потрібній якості зі звуковою доріжкою через її відсутність у потоці.
Як рішення ми можемо окремо забрати аудіо та відео та об'єднати за допомогою утиліти ffmpeg. Для цього обираємо потрібні потоки
#practice // Python 🇺🇦
Через технологію потокової передачі DASH (Dynamic Adaptive Streaming over HTTP), яка використовується youtube, ми не можемо отримати відразу відео в потрібній якості зі звуковою доріжкою через її відсутність у потоці.
Як рішення ми можемо окремо забрати аудіо та відео та об'єднати за допомогою утиліти ffmpeg. Для цього обираємо потрібні потоки
video та audio, після чого передаємо url'и в команду для ініціювання створення процесу для скачування та об'єднання потоків за допомогою ffmpeg.#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Працюємо з буфером обміну
Тут все просто: є пакет
У цьому пакеті є дві основні функції —
Таким чином, можна прямо через код копіювати виведення програми у буфер обміну замість того, щоб робити це вручну.
#practice // Python 🇺🇦
Тут все просто: є пакет
pyperclip, який дозволяє відправляти текст у буфер обміну вашого комп'ютера та отримувати його звідти.У цьому пакеті є дві основні функції —
copy() та paste(), за назвою яких зрозуміло їхнє призначення.Таким чином, можна прямо через код копіювати виведення програми у буфер обміну замість того, щоб робити це вручну.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Очищаємо рядки
Найчастіше обробка вхідних даних зводиться до перетворення символів у верхній чи нижній регістр. Іноді дані можна очистити за допомогою регулярного виразу.
Але у випадках, коли завдання ускладнюється, можна застосувати більш зручний спосіб її вирішення. За допомогою словника зі значеннями для заміни символів та методу
У прикладі бачимо, як символи перенесення рядка
#practice // Python 🇺🇦
Найчастіше обробка вхідних даних зводиться до перетворення символів у верхній чи нижній регістр. Іноді дані можна очистити за допомогою регулярного виразу.
Але у випадках, коли завдання ускладнюється, можна застосувати більш зручний спосіб її вирішення. За допомогою словника зі значеннями для заміни символів та методу
translate виходить вкрай лаконічний код.У прикладі бачимо, як символи перенесення рядка
\n і табуляції \t замінюються на звичайні пробіли, а символ \r видаляється з рядка повністю.#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Надсилаємо запити з HTTPX
Цікавий пакет для роботи із веб-запитами. Як кажуть самі розробники, це HTTP-клієнт наступного покоління.
Порівнюючи зі звичним
— Стандартний синхронний інтерфейс, але також є підтримка асинхронності
— Підтримка HTTP/1.1 та HTTP/2
— Можливість надсилати запити безпосередньо до WSGI та ASGI додатків
- Повна підтримка анотацій типів
- 100% покриття тестами
Раджу подивитися їх доки. Ще в них є туторіал для просунутого використання.
#practice // Python 🇺🇦
Цікавий пакет для роботи із веб-запитами. Як кажуть самі розробники, це HTTP-клієнт наступного покоління.
Порівнюючи зі звичним
requests, httpx має такі переваги:— Стандартний синхронний інтерфейс, але також є підтримка асинхронності
— Підтримка HTTP/1.1 та HTTP/2
— Можливість надсилати запити безпосередньо до WSGI та ASGI додатків
- Повна підтримка анотацій типів
- 100% покриття тестами
Раджу подивитися їх доки. Ще в них є туторіал для просунутого використання.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Генеруємо QR-код
Простий, але зручний та корисний пакет для створення QR-кодів. Для малювання картинок використовується
Щоб створити об'єкт картинки з QR-кодом, необхідно викликати метод
Ще пакет дозволяє створювати QR-коди на основі картинок та у 6 різних стилях. Про це все, а також про просунуті приклади використання можна почитати безпосередньо в документації.
#practice // Python 🇺🇦
Простий, але зручний та корисний пакет для створення QR-кодів. Для малювання картинок використовується
Pillow, тому переконайтеся, що він у вас встановлений.Щоб створити об'єкт картинки з QR-кодом, необхідно викликати метод
make() і передати дані як аргумент. Для збереження потрібно застосувати метод save() до отриманого об'єкту.Ще пакет дозволяє створювати QR-коди на основі картинок та у 6 різних стилях. Про це все, а також про просунуті приклади використання можна почитати безпосередньо в документації.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Відловлюємо баги з assert
При виконанні інструкції
Але якщо спробувати виконати інструкцію assert з логічним виразом, який дорівнює
Винятки
Також не потрібно, наприклад, обробляти введення користувача і намагатися обробити виключення
Якщо у вашому коді буде дуже багато
#practice // Python 🇺🇦
При виконанні інструкції
assert з логічним виразом, результат якого дорівнює True, нічого не станеться.Але якщо спробувати виконати інструкцію assert з логічним виразом, який дорівнює
False, то буде згенеровано виняток AssertionError.Винятки
AssertionError призначені скоріше для налагодження. При написанні програм на етапі розробки ми можемо бачити, що робимо щось не так (наприклад, передали в метод некоректне значення).Також не потрібно, наприклад, обробляти введення користувача і намагатися обробити виключення
AssertionError блоком try-except.Якщо у вашому коді буде дуже багато
assert'ів, то це торкнеться і продуктивності програми.#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
eq та hash
Python автоматично викликає метод
👀 Відео, котре допоможе розібратися із цими методами.
#practice // Python 🇺🇦
Python автоматично викликає метод
eq класу, коли ти використовуєш оператор == для порівняння екземплярів класу. Хеш об'єкта - це ціле число, що представляє значення об'єкта, і його можна отримати за допомогою функції hash(), якщо об'єкт можна хешувати. 👀 Відео, котре допоможе розібратися із цими методами.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Визначення літеральних типів
Коли нам знадобиться визначити з отриманого рядка літеральний тип (рядки, числа, списки, кортежі, словники, логічні значення та None), ми можемо скористатися функцією
Ця функція допоможе безпечно визначити літеральний тип, а якщо був переданий не літерал, то викине виняток. Це можна використовувати для оцінки виразів із зовнішніх джерел при парсингу файлів.
#practice // Python 🇺🇦
Коли нам знадобиться визначити з отриманого рядка літеральний тип (рядки, числа, списки, кортежі, словники, логічні значення та None), ми можемо скористатися функцією
literal_eval() із модуля ast.Ця функція допоможе безпечно визначити літеральний тип, а якщо був переданий не літерал, то викине виняток. Це можна використовувати для оцінки виразів із зовнішніх джерел при парсингу файлів.
#practice // Python 🇺🇦
Forwarded from Python 🇺🇦
Forwarded from Python 🇺🇦
Іменовані кортежі
Кортежі
Немає можливості дати імена окремим елементам, збереженим у кортежі. Це може вплинути на читання коду. І в такому випадку використовують іменовані кортежі
Кожен об'єкт в іменованому кортежі може бути доступний через унікальний, зручний для читання людиною ідентифікатор. При цьому вся функціональність від звичайних кортежів зберігається.
#practice // Python 🇺🇦
Кортежі
tuple, по суті, є незмінними списками. Структура даних є зручною, але ми можемо отримувати дані, використовуючи тільки числові індекси.Немає можливості дати імена окремим елементам, збереженим у кортежі. Це може вплинути на читання коду. І в такому випадку використовують іменовані кортежі
namedtuple з collections.Кожен об'єкт в іменованому кортежі може бути доступний через унікальний, зручний для читання людиною ідентифікатор. При цьому вся функціональність від звичайних кортежів зберігається.
#practice // Python 🇺🇦