Совет по чистому коду в Python
Избегайте использования слишком большого количества атрибутов для одного объекта. Старайтесь объединять их в группы, чтобы повысить связность, уменьшить количество связей и улучшить читаемость.
👉 @BookPython
Избегайте использования слишком большого количества атрибутов для одного объекта. Старайтесь объединять их в группы, чтобы повысить связность, уменьшить количество связей и улучшить читаемость.
👉 @BookPython
Кэшированные атрибуты
Во встроенном пакете
Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэширование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
👉 @BookPython
Во встроенном пакете
functools
присутствует декоратор @cached_property
, позволяющий кэшировать результат метода и загнать его в атрибут.Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэширование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
👉 @BookPython
Forwarded from Книги по Python | Books Python 📚
Applying Math with Python
Автор: Sam Morley (2020)
Во время чтения книги вы:
✔️Познакомитесь с базовыми пакетами, инструментами и библиотеками Python для решения математических задач;
✔️Изучите различные методы, которые помогут вам решать вычислительные задачи;
✔️Поймете основные концепции прикладной математики и способы их применения в информатике;
✔️Узнаете, как выбрать наиболее подходящий пакет, инструмент или технику для решения определенной проблемы;
✔️Научитесь реализовывать базовое построение графиков, изменять стили и добавлять метки с помощью matplotlib.
Скачать
👉 @python_360
Автор: Sam Morley (2020)
Во время чтения книги вы:
✔️Познакомитесь с базовыми пакетами, инструментами и библиотеками Python для решения математических задач;
✔️Изучите различные методы, которые помогут вам решать вычислительные задачи;
✔️Поймете основные концепции прикладной математики и способы их применения в информатике;
✔️Узнаете, как выбрать наиболее подходящий пакет, инструмент или технику для решения определенной проблемы;
✔️Научитесь реализовывать базовое построение графиков, изменять стили и добавлять метки с помощью matplotlib.
Скачать
👉 @python_360
Шифрование и расшифровка паролей
Приведенный ниже скрипт выполняет шифрование и дешифрование текста с использованием пакета cryptography.
В приведенной выше реализации ключ шифрования генерируется с помощью метода
Шифрование и дешифрование текста выполняются с использованием класса Fernet из пакета cryptography, где текст шифруется с помощью метода
👉 @BookPython
Приведенный ниже скрипт выполняет шифрование и дешифрование текста с использованием пакета cryptography.
В приведенной выше реализации ключ шифрования генерируется с помощью метода
Fernet.generate_key()
и сохраняется в файле для дальнейшего использования.Шифрование и дешифрование текста выполняются с использованием класса Fernet из пакета cryptography, где текст шифруется с помощью метода
encrypt()
и расшифровывается с помощью метода decrypt()
.👉 @BookPython
Что будет в результате выполнения данного кода?
Данный код выдаст в виде результата пустой список
Как известно, попытка доступа к элементу списка с использованием индекса, превышающего число элементов (например, операция
Особенно неприятным это обстоятельство делает то, что оно может привести к ошибкам, которые действительно трудно отследить, поскольку во время выполнения кода не возникает никаких ошибок.
👉 @BookPython
Данный код выдаст в виде результата пустой список
[]
, а ошибка IndexError не возникнет.Как известно, попытка доступа к элементу списка с использованием индекса, превышающего число элементов (например, операция
list[10]
в списке выше), приводит к ошибке IndexError. Однако, попытка получить доступ к срезу списка с начальным индексом, превышающем количество элементов в списке, не приведет к IndexError и просто вернет пустой список.Особенно неприятным это обстоятельство делает то, что оно может привести к ошибкам, которые действительно трудно отследить, поскольку во время выполнения кода не возникает никаких ошибок.
👉 @BookPython
Ray Casting 3D игра на Python + PyGame
Все мы помним старые игры, в которых впервые появилось трехмерное измерение.
Основоположником 3д игр стала игра Wolfenstein 3D, выпущенная в 1992 году а за ней и Doom 1993 года.
Эти две игры разработала одна компания: «id Software»
Она создала свой движок специально для этой игры, и в итоге получилась 3д игра, что считалось практически невозможным на те времена.
Но что будет если я скажу что это не 3д игра, а всего лишь симуляция и игра выглядит на самом деле примерно вот так?
https://habr.com/ru/articles/749764/
👉 @BookPython
Все мы помним старые игры, в которых впервые появилось трехмерное измерение.
Основоположником 3д игр стала игра Wolfenstein 3D, выпущенная в 1992 году а за ней и Doom 1993 года.
Эти две игры разработала одна компания: «id Software»
Она создала свой движок специально для этой игры, и в итоге получилась 3д игра, что считалось практически невозможным на те времена.
Но что будет если я скажу что это не 3д игра, а всего лишь симуляция и игра выглядит на самом деле примерно вот так?
https://habr.com/ru/articles/749764/
👉 @BookPython
Узнаем разницу в днях между датами представленными в виде строк
В данном коде мы используем функцию
👉 @BookPython
В данном коде мы используем функцию
strptime
из модуля datetime
, чтобы преобразовать строки в объекты datetime
. Затем мы вычисляем разницу между датами с помощью оператора - и получаем абсолютное значение разницы с помощью функции abs. Наконец, мы получаем разницу в днях, используя атрибут days
разницы объекта.👉 @BookPython
Объединение PDF-файлов с помощью PyPDF2
Установите библиотеку с помощью pip.
Вы можете легко объединить PDF-файлы, используя приведенный ниже код. Просто замените имена в списке pdf-файлов на имена pdf-файлов, которые вы хотите объединить (если они находятся в том же каталоге, что и ваш Python-скрипт), или на ссылки на pdf-файлы.
👉@BookPython
Установите библиотеку с помощью pip.
pip install PyPDF2
Вы можете легко объединить PDF-файлы, используя приведенный ниже код. Просто замените имена в списке pdf-файлов на имена pdf-файлов, которые вы хотите объединить (если они находятся в том же каталоге, что и ваш Python-скрипт), или на ссылки на pdf-файлы.
import PyPDF2
def merge files (pdf files: list):
# Create a PDF merger obiect
pdf merger = PyPDF2.PdfFileMerger ()
# Loop through the list and append each PDF to the merger
for pdf_file in pdf_files:
pdf_merger.append(pdf_file)
# Output file for the merged PDF
output_pdf = "merged_file.pdf"
pdf_merger.write(output_pdf)
pdf_merger.close()
# List of PDF files to merge
pdf_files = ["file_1", "files_2"]
if name == " main
merge_files (pdf_files)
print("PDFs merged successfully.")
👉@BookPython
Пишем микро-shellcode в формате ELF вручную
На Хабре уже не раз публиковались статьи про устройство формата ELF и написание файлов в таком формате вручную, но я не считаю лишним опубликовать и свой вариант решения этой задачи. В результате получился файл, вызывающий /bin/sh и занимающий всего 76 байт (что на 8 байт меньше, чем сумма длин заголовков ELF, необходимых для запуска).
https://habr.com/ru/articles/749480/
👉@BookPython
На Хабре уже не раз публиковались статьи про устройство формата ELF и написание файлов в таком формате вручную, но я не считаю лишним опубликовать и свой вариант решения этой задачи. В результате получился файл, вызывающий /bin/sh и занимающий всего 76 байт (что на 8 байт меньше, чем сумма длин заголовков ELF, необходимых для запуска).
https://habr.com/ru/articles/749480/
👉@BookPython
Какие нюансы есть в использовании чисел как ключей?
Числовые ключи в словарях подчиняются правилам сравнения чисел. Таким образом,
👉@BookPython
Числовые ключи в словарях подчиняются правилам сравнения чисел. Таким образом,
int(1)
и float(1.0)
считаются одинаковым ключом. Однако из-за того, что значения типа float
сохраняются приближенно, не рекомендуется использовать их в качестве ключей.👉@BookPython
Под капотом Python. Тонкости популярных конструкций with и contextmanager
В этой статье оглянемся в прошлое языка, ответим на вопросы, как написать менеджер контекста, как создать функцию генератор для декоратора contextmanager. Опытные разработчики могут узнать что-то новенькое или дополнить статью ценными комментариями.
https://habr.com/ru/companies/beeline_cloud/articles/749580/
👉@BookPython
В этой статье оглянемся в прошлое языка, ответим на вопросы, как написать менеджер контекста, как создать функцию генератор для декоратора contextmanager. Опытные разработчики могут узнать что-то новенькое или дополнить статью ценными комментариями.
https://habr.com/ru/companies/beeline_cloud/articles/749580/
👉@BookPython
Хабр
Под капотом Python. Тонкости популярных конструкций with и contextmanager
Привет, Хабр! Меня зовут Павел Корсаков, я python-разработчик, backend-developer в облачном провайдере beeline cloud . Язык программирования Python задумывался своим автором Гвидо ван Россумом как...
benedict
Если вы столкнулись с трудностями при работе со словарями в Python, то benedict может стать тем решением, которое вы искали.
benedict наследуется от встроенного типа dict, что означает, что он полностью совместим с существующими словарями и может быть использован в качестве замены в большинстве случаев.
Одной из ключевых особенностей benedict является поддержка
👉@BookPython
Если вы столкнулись с трудностями при работе со словарями в Python, то benedict может стать тем решением, которое вы искали.
benedict наследуется от встроенного типа dict, что означает, что он полностью совместим с существующими словарями и может быть использован в качестве замены в большинстве случаев.
Одной из ключевых особенностей benedict является поддержка
keylists
и keypaths
. Это упрощает доступ к значениям в сложных словарях и работу с ними без необходимости вручную копаться во вложенных уровнях.👉@BookPython
Практическое руководство по метапрограммированию в Python
Метапрограммирование - это техника программирования, при которой программа может изменять или генерировать код во время выполнения. Она позволяет разработчикам писать код, который может анализировать, изменять или создавать другой код.
https://dev.to/karishmashukla/a-practical-guide-to-metaprogramming-in-python-691
👉@BookPython
Метапрограммирование - это техника программирования, при которой программа может изменять или генерировать код во время выполнения. Она позволяет разработчикам писать код, который может анализировать, изменять или создавать другой код.
https://dev.to/karishmashukla/a-practical-guide-to-metaprogramming-in-python-691
👉@BookPython
Как узнать заряд батареи компьютера с помощью Python
Для узнавания остатка зарядки на компьютере в операционной системе Windows можно использовать следующий код на Python.
Для выполнения этого кода нужно установить библиотеку psutil. Это можно сделать с помощью
Данный код сначала получает объект
👉@BookPython
Для узнавания остатка зарядки на компьютере в операционной системе Windows можно использовать следующий код на Python.
Для выполнения этого кода нужно установить библиотеку psutil. Это можно сделать с помощью
pip install psutil
.Данный код сначала получает объект
battery
с помощью функции psutil.sensors_battery()
, которая предоставляет информацию о состоянии батареи компьютера. Затем он проверяет, подключена ли зарядка, с помощью свойства power_plugged
.👉@BookPython
Как работает multiprocessing в Python под капотом
Я довольно давно пишу на Python и во многих проектах использовал multiprocessing — пакет стандартной библиотеки языка Python, который предоставляет интерфейс для работы с процессами, очередями, пулами процессов и многими другими удобными инструментами для параллельного программирования. В какой-то момент я понял, что мне не хватает более детального понимания работы этой библиотеки.
Мне захотелось залезть в исходники multiprocessing, разобраться и заодно написать статью. Данная статья в основном рассчитана на новичков в Python и тех, кто хочет подробнее разобраться в том, как именно создаются процессы и пулы в Python и погрузиться в детали реализации.
В статье я не буду рассказывать что такое процессы и зачем они нужны. Почитать самую базу про операционные системы и процессы можно, например, тут и тут. Также важно уточнить, что весь приведенный в статье код соответствует версии Python 3.11.4
https://habr.com/ru/articles/803607/
👉@BookPython
Я довольно давно пишу на Python и во многих проектах использовал multiprocessing — пакет стандартной библиотеки языка Python, который предоставляет интерфейс для работы с процессами, очередями, пулами процессов и многими другими удобными инструментами для параллельного программирования. В какой-то момент я понял, что мне не хватает более детального понимания работы этой библиотеки.
Мне захотелось залезть в исходники multiprocessing, разобраться и заодно написать статью. Данная статья в основном рассчитана на новичков в Python и тех, кто хочет подробнее разобраться в том, как именно создаются процессы и пулы в Python и погрузиться в детали реализации.
В статье я не буду рассказывать что такое процессы и зачем они нужны. Почитать самую базу про операционные системы и процессы можно, например, тут и тут. Также важно уточнить, что весь приведенный в статье код соответствует версии Python 3.11.4
https://habr.com/ru/articles/803607/
👉@BookPython
Python provides the powerful library to work with date and time:
The most popular module for this job is
You can't use
Look at that
Also, after any arithmetic operations, you should
Since Python 3.6, it's recommended to use
If you are interested why
👉@BookPython
datetime.
The interesting part is, datetime
objects have the special interface for timezone support (namely the tzinfo
attribute), but this module only has limited support of its interface, leaving the rest of the job to different modules.The most popular module for this job is
pytz
. The tricky part is, pytz
doesn't fully satisfy tzinfo
interface. The pytz
documentation states this at one of the first lines: “This library differs from the documented Python API for tzinfo implementations.”You can't use
pytz
timezone objects as the tzinfo
attribute. If you try, you may get the absolute insane results:In : paris = pytz.timezone('Europe/Paris')
In : str(datetime(2017, 1, 1, tzinfo=paris))
Out: '2017-01-01 00:00:00+00:09'
Look at that
+00:09
offset. The proper use of pytz
is following:In : str(paris.localize(datetime(2017, 1, 1)))
Out: '2017-01-01 00:00:00+01:00'
Also, after any arithmetic operations, you should
normalize
your datetime object in case of offset changes (on the edge of the DST period for instance).In : new_time = time + timedelta(days=2)
In : str(new_time)
Out: '2018-03-27 00:00:00+01:00'
In : str(paris.normalize(new_time))
Out: '2018-03-27 01:00:00+02:00'
Since Python 3.6, it's recommended to use
dateutil.tz
instead of pytz
. It's fully compatible with tzinfo
, can be passed as an attribute, doesn't require normalize
, though works a bit slower.If you are interested why
pytz
doesn't support datetime
API, or you wish to see more examples, consider reading the decent article on the topic.👉@BookPython
Paul Ganssle
Paul Ganssle - pytz: The Fastest Footgun in the West
An explanation of the differences between dateutil and pytz's time zone models and why people tend to misuse pytz and introduce bugs into their datetime code.
Forwarded from Книги по Python | Books Python 📚
Hands-On Web Scraping with Python: Extract quality data from the web using effective Python techniques, 2nd Edition
Автор: Anish Chapagain (2023)
Применяя практический подход, это обновленное издание использует реальные примеры и упражнения для объяснения ключевых понятий. Начиная с введения в основы web-scraping и программирования на Python, вы рассмотрите ряд методов сбора информации, включая запросы, lxml, pyquery, Scrapy и Beautiful Soup. Вы также познакомитесь с такими продвинутыми темами, как безопасная работа с веб-страницами, веб-интерфейсы, Selenium для веб-скрепинга, извлечение PDF, regex, анализ данных, отчеты EDA, визуализация и машинное обучение.
Скачать
👉 @python_360
Автор: Anish Chapagain (2023)
Применяя практический подход, это обновленное издание использует реальные примеры и упражнения для объяснения ключевых понятий. Начиная с введения в основы web-scraping и программирования на Python, вы рассмотрите ряд методов сбора информации, включая запросы, lxml, pyquery, Scrapy и Beautiful Soup. Вы также познакомитесь с такими продвинутыми темами, как безопасная работа с веб-страницами, веб-интерфейсы, Selenium для веб-скрепинга, извлечение PDF, regex, анализ данных, отчеты EDA, визуализация и машинное обучение.
Скачать
👉 @python_360
Dash
Dash — это популярная библиотека для создания веб-приложений на Python. Она позволяет разработчикам создавать интерактивные, аналитические приложения без необходимости использовать JavaScript.
Dash основан на Flask, Plotly и React, и предоставляет простой способ создания веб-приложений с использованием компонентов, таких как графики, таблицы и формы.
В этом примере мы создаем простое веб-приложение с использованием Dash. Приложение содержит поле ввода, кнопку отправки и контейнер для вывода результата. Мы определяем функцию
👉@BookPython
Dash — это популярная библиотека для создания веб-приложений на Python. Она позволяет разработчикам создавать интерактивные, аналитические приложения без необходимости использовать JavaScript.
Dash основан на Flask, Plotly и React, и предоставляет простой способ создания веб-приложений с использованием компонентов, таких как графики, таблицы и формы.
В этом примере мы создаем простое веб-приложение с использованием Dash. Приложение содержит поле ввода, кнопку отправки и контейнер для вывода результата. Мы определяем функцию
update_output
, которая вызывается при нажатии на кнопку "Submit". Функция возвращает текст, введенный пользователем, и выводит его в контейнере.👉@BookPython
Пример уменьшения размерности данных с помощью линейных и нелинейных методов в Python
Уменьшение размерности данных — это подход упрощения сложных наборов данных для облегчения их обработки. По мере того как данные растут и становятся более сложными, извлекать информацию становится все труднее, а визуализация становится более накладной. Методы уменьшения размерности данных решают эту проблему, предоставляя меньшее количество измерений (столбцов) при сохранении наиболее важной информации. Мы можем потерять некоторые детали, но получить более простое представление данных, которое легче обрабатывать и сравнивать.
https://habr.com/ru/articles/751050/
👉@BookPython
Уменьшение размерности данных — это подход упрощения сложных наборов данных для облегчения их обработки. По мере того как данные растут и становятся более сложными, извлекать информацию становится все труднее, а визуализация становится более накладной. Методы уменьшения размерности данных решают эту проблему, предоставляя меньшее количество измерений (столбцов) при сохранении наиболее важной информации. Мы можем потерять некоторые детали, но получить более простое представление данных, которое легче обрабатывать и сравнивать.
https://habr.com/ru/articles/751050/
👉@BookPython
Отправка электронных писем
Приведенный скрипт использует библиотекуSMTP, чтобы отправлять электронные письма указанным получателям. Реализация может быть изменена в зависимости от варианта использования.
В приведенной выше реализации скрипт использует данные отправителя и получателя, а также тему и текст сообщения. Затем скрипт подключается к SMTP-серверу Gmail, форматирует сообщение и отправляет его с помощью метода
👉@BookPython
Приведенный скрипт использует библиотекуSMTP, чтобы отправлять электронные письма указанным получателям. Реализация может быть изменена в зависимости от варианта использования.
В приведенной выше реализации скрипт использует данные отправителя и получателя, а также тему и текст сообщения. Затем скрипт подключается к SMTP-серверу Gmail, форматирует сообщение и отправляет его с помощью метода
sendmail()
. Наконец, скрипт выводит сообщение, указывающее, что электронное письмо было успешно отправлено, и отключается от SMTP-сервера.👉@BookPython