Генерируем пароли и токены
Модуль secrets используется для генерации криптографически сильных случайных чисел, подходящих для управления такими данными, как пароли, аутентификация учетной записи, токены безопасности и связанные секреты.
В частности, secrets следует использовать по умолчанию вместо генератора псевдослучайных чисел модуля random, который в свою очередь предназначен для моделирования и симуляции, а не для защиты или криптографии.
В нашем примере мы генерируем пароль из 20 символов, который будет состоять из цифр и букв английского алфавита.
Подробнее про модуль secrets можно почитать здесь.
Модуль secrets используется для генерации криптографически сильных случайных чисел, подходящих для управления такими данными, как пароли, аутентификация учетной записи, токены безопасности и связанные секреты.
В частности, secrets следует использовать по умолчанию вместо генератора псевдослучайных чисел модуля random, который в свою очередь предназначен для моделирования и симуляции, а не для защиты или криптографии.
В нашем примере мы генерируем пароль из 20 символов, который будет состоять из цифр и букв английского алфавита.
Подробнее про модуль secrets можно почитать здесь.
Используем примитив синхронизации — мьютекс
Мьютекс позволяет синхронизировать работу нескольких потоков. Это базовый примитив синхронизации. У него есть два состояния — он может быть свободный или заблокированный. Следующий поток не сможет исполнить print() до тех пор, пока мьютекс не будет разблокирован предыдущим.
Мьютекс позволяет синхронизировать работу нескольких потоков. Это базовый примитив синхронизации. У него есть два состояния — он может быть свободный или заблокированный. Следующий поток не сможет исполнить print() до тех пор, пока мьютекс не будет разблокирован предыдущим.
Многопоточность в Python
Многопоточность — концепция программирования, которая позволяет выполнять несколько операций одновременно в разных потоках. Поток — это единичная наименьшая величина выполнения с набором инструкций, является частью процесса.
В Python, как и во многих современных языках программирования есть собственная поддержка многопоточности. Есть две основные библиотеки для организации потоков — thread и threading.
Многопоточность — концепция программирования, которая позволяет выполнять несколько операций одновременно в разных потоках. Поток — это единичная наименьшая величина выполнения с набором инструкций, является частью процесса.
В Python, как и во многих современных языках программирования есть собственная поддержка многопоточности. Есть две основные библиотеки для организации потоков — thread и threading.
Комбинируем графики
Matplotlib может легко комбинировать графики для отображения. Достаточно их просто объявить. Также указываем их положения с помощью функции subplot(). Выставляем имена, чтобы было наглядно, и выводим итоговое изображение.
Matplotlib может легко комбинировать графики для отображения. Достаточно их просто объявить. Также указываем их положения с помощью функции subplot(). Выставляем имена, чтобы было наглядно, и выводим итоговое изображение.
🕵 Пишем кейлоггер на Python для Windows за 5 минут
Руководство по созданию кейлоггера на Python, который записывает нажатия клавиш с клавиатуры и отправляет их по электронной почте или сохраняет в файл журнала.
https://proglib.io/sh/boCJveYIVu
Руководство по созданию кейлоггера на Python, который записывает нажатия клавиш с клавиатуры и отправляет их по электронной почте или сохраняет в файл журнала.
https://proglib.io/sh/boCJveYIVu
Библиотека программиста
🕵 Пишем кейлоггер на Python для Windows за 5 минут
Руководство по созданию кейлоггера на Python, который записывает нажатия клавиш с клавиатуры и отправляет их по электронной почте или сохраняет в файл журнала.
eval() и exec()
Python имеет возможность динамически считывать строку и обрабатывать ее как часть программного кода. Это достигается с помощью функций eval() и exec() (eval предназначена для вычисления выражений, а exec – для выполнения операторов).
В строке 3 функция eval() считывает входную строку как выражение Python, вычисляет ее и присваивает результат переменной b. В строке 7 функция exec() считывает входную строку, как оператор Python и выполняет ее.
Python имеет возможность динамически считывать строку и обрабатывать ее как часть программного кода. Это достигается с помощью функций eval() и exec() (eval предназначена для вычисления выражений, а exec – для выполнения операторов).
В строке 3 функция eval() считывает входную строку как выражение Python, вычисляет ее и присваивает результат переменной b. В строке 7 функция exec() считывает входную строку, как оператор Python и выполняет ее.
Создание своего первого графического интерфейса
Библиотека Tkinter предустановлена в Python в качестве стандартного модуля, поэтому нам не нужно устанавливать что-либо для ее использования.
Сначала импортируем Tkinter и создадим окно, в котором мы зададим его название.
mainloop - эта функция вызывает бесконечный цикл окна, поэтому окно будет ждать любого взаимодействия с пользователем, пока не будет закрыто.
Если вы забудете вызвать метод mainloop, для пользователя ничего не отобразится.
Label
Чтобы добавить текст в наш предыдущий пример, мы создадим lbl с помощью класса Label.
Затем мы установим позицию в окне с помощью метода grid. Опять же: если он не будет вызван, текст не будет отображаться!
Библиотека Tkinter предустановлена в Python в качестве стандартного модуля, поэтому нам не нужно устанавливать что-либо для ее использования.
Сначала импортируем Tkinter и создадим окно, в котором мы зададим его название.
mainloop - эта функция вызывает бесконечный цикл окна, поэтому окно будет ждать любого взаимодействия с пользователем, пока не будет закрыто.
Если вы забудете вызвать метод mainloop, для пользователя ничего не отобразится.
Label
Чтобы добавить текст в наш предыдущий пример, мы создадим lbl с помощью класса Label.
Затем мы установим позицию в окне с помощью метода grid. Опять же: если он не будет вызван, текст не будет отображаться!
Добавление виджета Button
Начнем с добавления кнопки в окно. Кнопка создается и добавляется в окно так же, как и метка.
Обратите внимание, что мы помещаем кнопку во второй столбец окна, что равно 1. Если вы забудете и поместите кнопку в том же столбце, который равен 0, он покажет только кнопку.
Реакция на нажатие кнопок
Для начала мы запишем функцию clicked(), которую нужно выполнить при нажатии кнопки.
Затем мы передадим аргументу command нашу функцию. Обратите внимание: мы пишем clicked, а не clicked() с круглыми скобками. Потому что мы не вызываем, а передаем функцию.
Начнем с добавления кнопки в окно. Кнопка создается и добавляется в окно так же, как и метка.
Обратите внимание, что мы помещаем кнопку во второй столбец окна, что равно 1. Если вы забудете и поместите кнопку в том же столбце, который равен 0, он покажет только кнопку.
Реакция на нажатие кнопок
Для начала мы запишем функцию clicked(), которую нужно выполнить при нажатии кнопки.
Затем мы передадим аргументу command нашу функцию. Обратите внимание: мы пишем clicked, а не clicked() с круглыми скобками. Потому что мы не вызываем, а передаем функцию.
Настройка размера и шрифта текста
Вы можете задать шрифт текста и его размер. Также можно изменить стиль шрифта. Для этого передайте в аргумент font.
Обратите внимание, что параметр font может быть передан любому виджету. Для того, чтобы поменять его шрифт, он применяется не только к Label, но и к Button.
Изменение цвета текста и фона у Button
Вы можете поменять цвет текста кнопки или любого другого виджета, указывая аргумент fg.
Кроме того, вы можете поменять цвет фона любого виджета, используя свойство bg.
Заметьте, что в данном коде кнопка ничего не делает.
Вы можете задать шрифт текста и его размер. Также можно изменить стиль шрифта. Для этого передайте в аргумент font.
Обратите внимание, что параметр font может быть передан любому виджету. Для того, чтобы поменять его шрифт, он применяется не только к Label, но и к Button.
Изменение цвета текста и фона у Button
Вы можете поменять цвет текста кнопки или любого другого виджета, указывая аргумент fg.
Кроме того, вы можете поменять цвет фона любого виджета, используя свойство bg.
Заметьте, что в данном коде кнопка ничего не делает.
Библиотека newspaper3k
Часто приходится парсить статьи? Первое, что приходит на ум, — BeautifulSoup, но newspaper3k дает огромное преимущество.
Он даёт возможность извлекать статьи и связанные с ней мета-данные. То есть, ты можешь получить html-код, авторов и текст статьи. И не придется самому распарсивать статью.
Библиотеку необходимо установить:
Часто приходится парсить статьи? Первое, что приходит на ум, — BeautifulSoup, но newspaper3k дает огромное преимущество.
Он даёт возможность извлекать статьи и связанные с ней мета-данные. То есть, ты можешь получить html-код, авторов и текст статьи. И не придется самому распарсивать статью.
Библиотеку необходимо установить:
pip install newspaper3kБиблиотека pydantic
Программисту всегда приходится задумываться над типами данных, которые он принимает. Но это рутина, занимающая кучу времени. К счастью, проверять тип на валидность можно намного удобнее с библиотекой pydantic.
С ее помощью можно не писать однотипный код и оставить все нюансы на библиотеку. И еще пара плюсов: ее удобно отлаживать и получать значения.
Программисту всегда приходится задумываться над типами данных, которые он принимает. Но это рутина, занимающая кучу времени. К счастью, проверять тип на валидность можно намного удобнее с библиотекой pydantic.
С ее помощью можно не писать однотипный код и оставить все нюансы на библиотеку. И еще пара плюсов: ее удобно отлаживать и получать значения.
Введение в super()
С точки зрения поддерживаемости super() может быть полезен даже при одиночном наследовании. Если по какой-либо причине ваш дочерний класс меняет свой шаблон наследования (т.е. изменяется родительский класс или происходит переход к множественному наследованию), то нет необходимости искать и заменять все устаревшие ссылки на ParentClass.method_name(). Таким образом, использование super() позволит всем изменениям пройти через изменение в операторе класса.
С точки зрения поддерживаемости super() может быть полезен даже при одиночном наследовании. Если по какой-либо причине ваш дочерний класс меняет свой шаблон наследования (т.е. изменяется родительский класс или происходит переход к множественному наследованию), то нет необходимости искать и заменять все устаревшие ссылки на ParentClass.method_name(). Таким образом, использование super() позволит всем изменениям пройти через изменение в операторе класса.
🐍 Работа с файлами в Python: 5 задач для начинающих с решениями
Начинаем изучать инструменты Python, предназначенные для работы с текстовыми файлами форматов .txt, .md и .csv: напишем программы для поиска и замены слов, подсчета стоимости товаров, получения статистики по тексту и преобразования информации из csv-файла в словарь.
https://proglib.io/sh/ugxh4jN3lm
Начинаем изучать инструменты Python, предназначенные для работы с текстовыми файлами форматов .txt, .md и .csv: напишем программы для поиска и замены слов, подсчета стоимости товаров, получения статистики по тексту и преобразования информации из csv-файла в словарь.
https://proglib.io/sh/ugxh4jN3lm
Присваиваем значение переменной окружения
Для присвоения значения любой переменной среды используется функция setdefault().
Давайте напишем код, чтобы с помощью функции setdefault() изменить значение переменной DEBUG на True (по умолчанию установлено False). После установки значения мы проверим его функцией get().
Если мы сделали всё правильно, выведется сообщение «Режим отладки включен», в противном случае – «Режим отладки выключен».
Для присвоения значения любой переменной среды используется функция setdefault().
Давайте напишем код, чтобы с помощью функции setdefault() изменить значение переменной DEBUG на True (по умолчанию установлено False). После установки значения мы проверим его функцией get().
Если мы сделали всё правильно, выведется сообщение «Режим отладки включен», в противном случае – «Режим отладки выключен».
Изменение в контекстных менеджерах
Как вы знаете, для удобного управления жизненным циклом ресурсов в python существуют контекстные менеджеры. Но до недавнего времени, чтобы открыть несколько ресурсов в рамках одной области видимости
С выходом python 3.10 появился новый синтаксис, позволяющий в круглых скобках указывать несколько контекстных менеджеров. А также мы можем использовать переменную созданную одним контекстным менеджером в рамках следующего за ним менеджера.
Это стало возможным благодаря появлению нового синтаксического анализатора PEG в python 3.9. И, строго говоря, python 3.9 уже допускал данный синтаксис, хотя официально еще не поддерживался.
Как вы знаете, для удобного управления жизненным циклом ресурсов в python существуют контекстные менеджеры. Но до недавнего времени, чтобы открыть несколько ресурсов в рамках одной области видимости
with нам требовалось либо прописывать их в одну строку либо использовать синтаксис переноса - обратный слеш \ (но это противоречит PEP8).С выходом python 3.10 появился новый синтаксис, позволяющий в круглых скобках указывать несколько контекстных менеджеров. А также мы можем использовать переменную созданную одним контекстным менеджером в рамках следующего за ним менеджера.
Это стало возможным благодаря появлению нового синтаксического анализатора PEG в python 3.9. И, строго говоря, python 3.9 уже допускал данный синтаксис, хотя официально еще не поддерживался.