Многопоточность
В модуле
Параметр
Когда
#потоки #многопоточность
В модуле
threading
новый поток выполнения может начинаться с нового threading.Thread
и присвоения ему функции для выполнения.Параметр
target
ссылается на функцию (или вызываемый объект), который будет работать. Нить не начнет выполнение до start
, также не будет вызываться Thread
объекта.Когда
my_thread
завершается, вызов start
выкинет исключение RuntimeError. Если вы хотите запустить Thread в фоновом режиме, то передавайте daemon=True
или установите my_thread.daemon
в True
перед вызовом start()
.#потоки #многопоточность
Добавляем классу большую функциональность
На прошлой неделе мы объясняли декоратор
Зачем использовать. Статические методы делают код более читабельным и повторно используемым. Его также удобнее использовать для импорта по сравнению с обычными функциями, поскольку функцию не нужно отдельно импортировать.
В чем же разница?
На прошлой неделе мы объясняли декоратор
@classmethod
, а сейчас рассмотрим @staticmethod
. @staticmethod
можно воспринимать как метод, который "не знает, к какому классу относится". Он просто получает переданные аргументы, без неявного первого аргумента, и его определение не изменяется через наследование. Еще раз: статические методы прикреплены к классу лишь для удобства — и не могут менять состояние ни класса, ни его экземпляра.Зачем использовать. Статические методы делают код более читабельным и повторно используемым. Его также удобнее использовать для импорта по сравнению с обычными функциями, поскольку функцию не нужно отдельно импортировать.
В чем же разница?
@classmethod
используется в суперклассе для определения того, как метод должен вести себя, когда он вызывается разными дочерними классами. @staticmethod
используется, когда мы хотим вернуть объект, независимо от вызываемого дочернего класса.Делегирующие генераторы
Давайте создадим простенькую генераторную функцию
А также ещё одну генераторную функцию
Цикл, который можно написать в
Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации
#генераторы
Давайте создадим простенькую генераторную функцию
subgen
, которая будет возвращать числа от 0 до переданного аргумента.А также ещё одну генераторную функцию
delegator
, которая будет возвращать числа из итерируемого объекта source
, который передадим в качестве аргумента.Цикл, который можно написать в
delegator
, можно заменить всего лишь одной строчкой. То есть yield from
заменяет цикл for
, в котором только возвращаются значения через yield
.Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации
delegator
можно назвать делигирующим генератором, а subgen
подгенератором.#генераторы
Аннотации типов
Всем известно, что Python – язык с динамической типизацией. Аннотации типов нужны для того, чтобы повысить информативность исходного кода, но они никак не влияют на поведение программы.
Типы данных указывается через двоеточие после имени переменной после её создания. Для примера создадим словарь с числами и список, состоящий из значений этого словаря, а также функцию для сложения двух чисел.
Однако помните, что аннотации типов не влияют на ход исполнения программы, поэтому в ранее написаную функцию мы с таким же успехом можем передать и строки, хотя указывали целочисленный тип данных.
#типы_данных #аннотации
Всем известно, что Python – язык с динамической типизацией. Аннотации типов нужны для того, чтобы повысить информативность исходного кода, но они никак не влияют на поведение программы.
Типы данных указывается через двоеточие после имени переменной после её создания. Для примера создадим словарь с числами и список, состоящий из значений этого словаря, а также функцию для сложения двух чисел.
Однако помните, что аннотации типов не влияют на ход исполнения программы, поэтому в ранее написаную функцию мы с таким же успехом можем передать и строки, хотя указывали целочисленный тип данных.
#типы_данных #аннотации
Паттерн проектирования Singleton
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
В примере мы проверяем, есть ли значение у атрибута
То есть при вызове конструктора класса
#классы #паттерны
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
__new__
вызывается для создания экземпляра класса, перед вызовом __init__
. На вход первым аргументом метод принимает сам класс, а возвращать должен уже экземпляр (даже можно экземпляр и другого класса).В примере мы проверяем, есть ли значение у атрибута
instance
. Если нет, то присваиваем атрибуту экземпляр этого же класса. А если уже экземпляр создан, то просто его возвращаем.То есть при вызове конструктора класса
Singleton
, будет возвращаться один и тот же объект из памяти.#классы #паттерны
Превью из длинного текста
Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.
Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод
Первым аргументом передается строка, вторым указываем количество символов, которое должен содержать результат. Также третьим аргументом можно передать заготовку, которая будет вставляться в конце обрезанной строки.
#строки #textwrap
Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.
Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод
shorten
из модуля textwrap
. Первым аргументом передается строка, вторым указываем количество символов, которое должен содержать результат. Также третьим аргументом можно передать заготовку, которая будет вставляться в конце обрезанной строки.
#строки #textwrap
Использование списков в качестве стеков
Стек – абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (last in – first out). В переводе с английского "последним пришёл – первым вышел".
Списки в Python имеют удобные встроенные методы, которых достаточно для реализации такой структуры данных. Для добавления элемента в конец стека используем метод
Программный вид стека применяется для обхода структур по типу графов и деревьев. При реализации рекурсивных функций также будет применяться стек, но в таком случае уже его аппаратный вид.
#списки #стек
Стек – абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (last in – first out). В переводе с английского "последним пришёл – первым вышел".
Списки в Python имеют удобные встроенные методы, которых достаточно для реализации такой структуры данных. Для добавления элемента в конец стека используем метод
append
, для извлечения – pop
.Программный вид стека применяется для обхода структур по типу графов и деревьев. При реализации рекурсивных функций также будет применяться стек, но в таком случае уже его аппаратный вид.
#списки #стек
Легкий веб-фреймворк
Несмотря на свою минималистичность,
После запуска подобного примера можете перейти в браузере по адресу
#фреймворки #bottle
Bottle
– это быстрый, простой и легкий микро-веб-фреймворк WSGI
для Python. Он распространяется как единый файловый модуль и не имеет никаких зависимостей, кроме стандартной библиотеки Python.Несмотря на свою минималистичность,
Bottle
предоставляет довольно широкие возможности, которых на 100% хватает для мелких и средних проектов. Вот список основных возможностей: routing, templates, POST-routing, обработка форм, cookies и сервер.После запуска подобного примера можете перейти в браузере по адресу
localhost:5000/hello/world
и посмотреть на результат, полученный из всего пяти строк кода.#фреймворки #bottle
Создание процессов
Класс
При создании экземпляра
Очень важно ожидать завершения всех созданных дочерних процессов. Для этого можно воспользоваться удобной функцией
#процессы #multiprocessing
Класс
Process
из встроенного модуля multiprocessing
позволяет создавать процессы без прямого вызова функции fork
, про которую писали раньше на канале.При создании экземпляра
Proccess
необходимо передать функцию, которую требуется исполнить в отдельном дочернем процессе и аргументы этой функции. Процесс будет создан после вызова метода start
. Внутри метода start
будет вызван fork
и будет исполнена функция в отдельном процессе.Очень важно ожидать завершения всех созданных дочерних процессов. Для этого можно воспользоваться удобной функцией
join
.#процессы #multiprocessing
Одноразовый метод в классе
В случае, если вдруг понадобится в классе функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция, можно воспользоваться приемом на картинке.
Последней строчкой метода
Подобный прием будет полезен в тех случаях, когда при самом первом вызове метода в классе требуются выполнить одноразовые действия, которые в дальнейшем не нужны.
#классы #функции
В случае, если вдруг понадобится в классе функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция, можно воспользоваться приемом на картинке.
Последней строчкой метода
call
является переопределение самого этого метода на другой, а именно normal_call
. Таким образом, изначальный код call
будет исполнен только один раз.Подобный прием будет полезен в тех случаях, когда при самом первом вызове метода в классе требуются выполнить одноразовые действия, которые в дальнейшем не нужны.
#классы #функции
Красивые таблицы в терминале
PrettyTable – это простая библиотека, предназначенная для быстрого и легкого представления табличных данных в виде ASCII. Модуль можно установить привычным способом через
Для создания таблиц и работы с ними используется класс
Более того, модуль
#таблицы #prettytable
PrettyTable – это простая библиотека, предназначенная для быстрого и легкого представления табличных данных в виде ASCII. Модуль можно установить привычным способом через
pip
.Для создания таблиц и работы с ними используется класс
PrettyTable
из этого модуля. Задать название для столбцов можно с помощью атрибута fields_name
. Строки в таблицу добавляются путем вызова метода add_row
.Более того, модуль
prettytable
позволяет регулировать различные параметры, сортировать данные, работать с html
, а также взаимодействовать с csv
и sql
таблицами. Так что возможностей у этого модуля предостаточно.#таблицы #prettytable
Ипотека 0,1% для IT-специалистов от Самолета
Девелопер запускает ипотечную программу для IT-специалистов. Теперь можно купить квартиру в Москве, Московской области и Санкт-Петербурге на эксклюзивных условиях от «Самолета»:
> Ставка 0,1% на весь срок
> Возраст заёмщика от 22 до 44 лет (включительно)
> Ежемесячный платёж ниже на 45%, чем при обычной ставке
> Сумма кредита до 18 млн. рублей
> Все баги с переплатами исправлены – теперь они минимальны
Подробнее
Девелопер запускает ипотечную программу для IT-специалистов. Теперь можно купить квартиру в Москве, Московской области и Санкт-Петербурге на эксклюзивных условиях от «Самолета»:
> Ставка 0,1% на весь срок
> Возраст заёмщика от 22 до 44 лет (включительно)
> Ежемесячный платёж ниже на 45%, чем при обычной ставке
> Сумма кредита до 18 млн. рублей
> Все баги с переплатами исправлены – теперь они минимальны
Подробнее
Прогресс выполнения программы
Индикаторы прогресса добавляют наглядности в скриптах, которые исполняют какие-то функции, требующие времени для выполнения. Модуль
Привычный
Кстати, интересный факт – название
#модули #tqdm
Индикаторы прогресса добавляют наглядности в скриптах, которые исполняют какие-то функции, требующие времени для выполнения. Модуль
tqdm
является простым и лаконичным вариантом.Привычный
range
можно заменить на trange
для визуализации прогресса. А для итерации по какой-либо последовательности, достаточно просто передать её в функцию tqdm
. Также модуль хорошо себя зарекомендовал и в Jupyter Notebook.Кстати, интересный факт – название
tqdm
произошло от арабского слова "taqaddum" (تقدّم), которое означает "прогресс," а также это ещё и сокращение от "я тебя сильно люблю" на испанском (te quiero demasiado).#модули #tqdm
Делаем скриншоты
Кросс-платформенный модуль
Для создания скриншота используется метод
Подобный модуль может быть полезен, например, для логирования скриптов, использующих Selenium, который может открывать браузер и производить какие-либо операции в нём.
#модули #pyscreenshot
Кросс-платформенный модуль
pyscreenshot
позволяет делать скриншоты как всего экрана, так и его части. Для его работы должна быть корректно установлена библиотека pillow
.Для создания скриншота используется метод
grab
, для его открытия – show
, для сохранения – save
. Также в grab
можно передать аргумент bbox
для захвата только определённой части экрана.Подобный модуль может быть полезен, например, для логирования скриптов, использующих Selenium, который может открывать браузер и производить какие-либо операции в нём.
#модули #pyscreenshot
Делаем HTTP запросы
Пакет
Устанавливается
Модуль идеально подходит как для работы со внешними API веб-сервисов, так и для получения HTML кода веб-страниц.
#requests
Пакет
requests
абстрагирует сложности выполнения запросов за красивым, простым API, чтобы вы могли сосредоточиться на взаимодействии с сервисами и работе с данными в ваших приложениях.Устанавливается
requests
стандартным путем через пакетный менеджер pip
. Запросы GET, POST, PUT и DELETE делаются интуитивно понятно. Атрибуты у объекта Response
позволяют получить всю информацию об ответе от сервера.Модуль идеально подходит как для работы со внешними API веб-сервисов, так и для получения HTML кода веб-страниц.
#requests
Функции только с именованными аргументами
Для того чтобы при использовании некоторой функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно использовать аргумент
Таким образом, если просто передать два аргумента в функцию, то возникнет исключение
Такой прием может быть полезен для того, чтобы улучшить понятность кода. Здесь, что вполне очевидно, можно использовать и позиционные аргументы – в том случае, если поместить их до
#функции
Для того чтобы при использовании некоторой функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно использовать аргумент
*
перед списком именованных аргументов.Таким образом, если просто передать два аргумента в функцию, то возникнет исключение
TypeError
. Но если передать их как именованные аргументы, то всё будет работать отлично.Такой прием может быть полезен для того, чтобы улучшить понятность кода. Здесь, что вполне очевидно, можно использовать и позиционные аргументы – в том случае, если поместить их до
*
.#функции
Forwarded from кабачковая икра по акции
Полезно удалёнщикам: 10 лучших городов мира, где идеально соблюдается баланс между работой и личной жизнью. Рейтинг составило издание Business Insider с консалтинговой компанией Kisi.
1. Осло 🇳🇴
2. Берн 🇨🇭
3. Хельсинки 🇫🇮
4. Цюрих 🇨🇭
5. Копенгаген 🇩🇰
6. Женева 🇨🇭
7. Оттава 🇨🇦
8. Сидней 🇦🇺
9. Штутгарт 🇩🇪
10. Мюнхен 🇩🇪
8 из 10 городов находятся в Европе. В десятку лучших не попал ни один город США. Наилучшую позицию среди американских городов в расширенном списке занял Сиэтл, он на 32 месте. Почти треть городов в топ-30 — из Германии. Россия в топ-100 не представлена.
В рейтинге учитывали безопасность, здравоохранение, доступность удалённых рабочих мест и количество дней оплачиваемого отпуска по уходу за ребёнком. Также анализ учитывал факторы открытых пространств, качество воздуха и инфляцию.
1. Осло 🇳🇴
2. Берн 🇨🇭
3. Хельсинки 🇫🇮
4. Цюрих 🇨🇭
5. Копенгаген 🇩🇰
6. Женева 🇨🇭
7. Оттава 🇨🇦
8. Сидней 🇦🇺
9. Штутгарт 🇩🇪
10. Мюнхен 🇩🇪
8 из 10 городов находятся в Европе. В десятку лучших не попал ни один город США. Наилучшую позицию среди американских городов в расширенном списке занял Сиэтл, он на 32 месте. Почти треть городов в топ-30 — из Германии. Россия в топ-100 не представлена.
В рейтинге учитывали безопасность, здравоохранение, доступность удалённых рабочих мест и количество дней оплачиваемого отпуска по уходу за ребёнком. Также анализ учитывал факторы открытых пространств, качество воздуха и инфляцию.
Находим файлы по шаблону
Основной фишкой модуля
В одноименный метод
Вообще модуль является встроенным, но в некоторых ситуациях импорт может выдать исключение. В таком случае надо просто его переустановить через пакетный менеджер
#glob
Основной фишкой модуля
glob
является удобная и лаконичная работа с поиском файлов по паттернам. Более того, можно даже пройтись по директориям рекурсивно.В одноименный метод
glob
передаётся шаблон для поиска файлов, а возвращается список с результатами. Все методы следуют механизму и правилам сопоставления паттернов в стиле Unix. Вообще модуль является встроенным, но в некоторых ситуациях импорт может выдать исключение. В таком случае надо просто его переустановить через пакетный менеджер
pip
.#glob
Разница между генераторными выражениями и генераторами коллекций
Записи в первой и второй строчке в коде выше очень похожи, но различаются видами скобок. В генераторе списка они квадратные, а в генераторном выражении – круглые.
Распечатав переменные, можно заметить, что значением переменной
Если вам нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы, то используйте генераторы коллекций.
А если же значения понадобятся еще не скоро или вообще неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.
#генераторы
Записи в первой и второй строчке в коде выше очень похожи, но различаются видами скобок. В генераторе списка они квадратные, а в генераторном выражении – круглые.
Распечатав переменные, можно заметить, что значением переменной
a
является список, а переменная x
хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.Если вам нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы, то используйте генераторы коллекций.
А если же значения понадобятся еще не скоро или вообще неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.
#генераторы
Перегрузка операторов
Сначала стоит напомнить, что методы, которые начинаются и заканчиваются двойными нижними подчеркиваниями, называются магическими.
Например, выше в классе
Для перегрузки оператора
Таким образом, когда разработчик пишет запись
#классы
Сначала стоит напомнить, что методы, которые начинаются и заканчиваются двойными нижними подчеркиваниями, называются магическими.
Например, выше в классе
Point
мы определили __str__
, который отвечает за то, как выводятся объекты класса на экран.Для перегрузки оператора
"+"
нужно определить метод __add__
. Он принимает два аргумента, которыми являются, соответственно, операнды в операции сложения.Таким образом, когда разработчик пишет запись
p1 + p2
, интерпретатор воспринимает это в виде Point.__add__(p1, p2)
. Для всех операторов в языке, включая и логические, есть свои магические методы. #классы