Пять декораторов Python, которые могут сократить код в два раза
В этой статье мы рассмотрим концепцию Python-оберток и приведем пять примеров, которые могут улучшить процесс разработки на Python.
https://habr.com/ru/companies/slurm/articles/748176/
original https://python.plainenglish.io/five-python-wrappers-that-can-reduce-your-code-by-half-af775feb1d5
👉 @BookPython
В этой статье мы рассмотрим концепцию Python-оберток и приведем пять примеров, которые могут улучшить процесс разработки на Python.
https://habr.com/ru/companies/slurm/articles/748176/
original https://python.plainenglish.io/five-python-wrappers-that-can-reduce-your-code-by-half-af775feb1d5
👉 @BookPython
👍5
Нижнее подчеркивание
1.
2. интерактивный режим использует
3. руководство модуля
👉 @BookPython
1.
_
используется, когда вам нужно придумать имена для значений, которые вам не нужны – например, в циклах for
.2. интерактивный режим использует
_
для хранения результата последнего выполненного выражения.3. руководство модуля
gettext
рекомендует псевдоним его функции gettext()
для _()
, чтобы минимизировать загромождение вашего кода.👉 @BookPython
👍4
Python декораторы на максималках. Универсальный рецепт по написанию и аннотированию от мала до велика
Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python. С декораторами, наверное, знакомы все джуны (хотя бы в рамках подготовки к собеседованиям). Однако, крайне мало разработчиков пишут их правильно. Особенно принимая во внимания тенденции последних нескольких лет к аннотированию всего и вся. Даже популярные open-source проекты (если основная часть их кода была написана до 2018 года) вряд ли дадут вам примеры декораторов, отвечающих всем современным требованиям к коду.
https://habr.com/ru/articles/750312/
@BookPython
Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python. С декораторами, наверное, знакомы все джуны (хотя бы в рамках подготовки к собеседованиям). Однако, крайне мало разработчиков пишут их правильно. Особенно принимая во внимания тенденции последних нескольких лет к аннотированию всего и вся. Даже популярные open-source проекты (если основная часть их кода была написана до 2018 года) вряд ли дадут вам примеры декораторов, отвечающих всем современным требованиям к коду.
https://habr.com/ru/articles/750312/
@BookPython
👍2🥰2
Как в Python осуществляется управление памятью.
В Python объекты и структуры данных находятся в закрытой динамически выделяемой области private heap, которая управляется менеджером памяти Python. Он делегирует часть работы программам распределения ресурсов allocators, закрепленным за конкретными объектами, и одновременно с этим следит, чтобы они не выходили за пределы динамически выделяемой области.
По факту данной областью управляет интерпретатор. Пользователь никак не контролирует данный процесс, даже когда манипулирует ссылками объектов на блоки памяти внутри динаической области. Менеджер памяти Python распределяет пространство динамической области среди объектов и другие внутренние буферы по требованию.
👉 @BookPython
В Python объекты и структуры данных находятся в закрытой динамически выделяемой области private heap, которая управляется менеджером памяти Python. Он делегирует часть работы программам распределения ресурсов allocators, закрепленным за конкретными объектами, и одновременно с этим следит, чтобы они не выходили за пределы динамически выделяемой области.
По факту данной областью управляет интерпретатор. Пользователь никак не контролирует данный процесс, даже когда манипулирует ссылками объектов на блоки памяти внутри динаической области. Менеджер памяти Python распределяет пространство динамической области среди объектов и другие внутренние буферы по требованию.
👉 @BookPython
👍3
9 способов обмена массивом Numpy между процессами
В Python можно передавать массивы numpy между процессами.
Существует множество способов передать массив numpy между процессами, например, как аргумент функции, как наследуемую глобальную переменную, через очередь или трубу, как ctype Array и RawArray, файл с отображением памяти, массив с поддержкой SharedMemory или через менеджер.
https://superfastpython.com/numpy-share-array-processes/
👉 @BookPython
В Python можно передавать массивы numpy между процессами.
Существует множество способов передать массив numpy между процессами, например, как аргумент функции, как наследуемую глобальную переменную, через очередь или трубу, как ctype Array и RawArray, файл с отображением памяти, массив с поддержкой SharedMemory или через менеджер.
https://superfastpython.com/numpy-share-array-processes/
👉 @BookPython
Super Fast Python
9 Ways to Share a Numpy Array Between Processes - Super Fast Python
You can share numpy arrays between processes in Python. There are many ways to share a numpy array between processes, such as as a function argument, as an inherited global variable, via a queue or a pipe, as a ctype Array and RawArray, memory-mapped file…
👍2
Программирование на Python.pdf
1.6 MB
Программирование на Python
Полищук В.Ю.
Инженерная школа информационных технологий и робототехники, Томский политехнический университет
👉 @BookPython
Полищук В.Ю.
Инженерная школа информационных технологий и робототехники, Томский политехнический университет
👉 @BookPython
👍6
setattr()
С помощью данной функции мы можем менять атрибуты объекта во время выполнения программы. Первым аргументом она принимает объект, вторым — имя атрибута, а третьим — значение, которое необходимо установить.
👉 @BookPython
С помощью данной функции мы можем менять атрибуты объекта во время выполнения программы. Первым аргументом она принимает объект, вторым — имя атрибута, а третьим — значение, которое необходимо установить.
👉 @BookPython
👍8
Голосовой ввод с микрофона в Python
Установка пакета —
Важная вещь, которую вы должны иметь в виду, что здесь мы будем работать с микрофоном, поэтому вам необходимо знать идентификатор устройства вашего устройства ввода звука.
👉 @BookPython
Установка пакета —
pip install SpeechRecognition
.Важная вещь, которую вы должны иметь в виду, что здесь мы будем работать с микрофоном, поэтому вам необходимо знать идентификатор устройства вашего устройства ввода звука.
👉 @BookPython
👍8
Совет по чистому коду в Python
Избегайте использования слишком большого количества атрибутов для одного объекта. Старайтесь объединять их в группы, чтобы повысить связность, уменьшить количество связей и улучшить читаемость.
👉 @BookPython
Избегайте использования слишком большого количества атрибутов для одного объекта. Старайтесь объединять их в группы, чтобы повысить связность, уменьшить количество связей и улучшить читаемость.
👉 @BookPython
👍11🤔2👎1👌1
Кэшированные атрибуты
Во встроенном пакете
Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэширование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
👉 @BookPython
Во встроенном пакете
functools
присутствует декоратор @cached_property
, позволяющий кэшировать результат метода и загнать его в атрибут.Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэширование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
👉 @BookPython
👍6👎1
Forwarded from Книги по Python | Books Python 📚
Applying Math with Python
Автор: Sam Morley (2020)
Во время чтения книги вы:
✔️Познакомитесь с базовыми пакетами, инструментами и библиотеками Python для решения математических задач;
✔️Изучите различные методы, которые помогут вам решать вычислительные задачи;
✔️Поймете основные концепции прикладной математики и способы их применения в информатике;
✔️Узнаете, как выбрать наиболее подходящий пакет, инструмент или технику для решения определенной проблемы;
✔️Научитесь реализовывать базовое построение графиков, изменять стили и добавлять метки с помощью matplotlib.
Скачать
👉 @python_360
Автор: Sam Morley (2020)
Во время чтения книги вы:
✔️Познакомитесь с базовыми пакетами, инструментами и библиотеками Python для решения математических задач;
✔️Изучите различные методы, которые помогут вам решать вычислительные задачи;
✔️Поймете основные концепции прикладной математики и способы их применения в информатике;
✔️Узнаете, как выбрать наиболее подходящий пакет, инструмент или технику для решения определенной проблемы;
✔️Научитесь реализовывать базовое построение графиков, изменять стили и добавлять метки с помощью matplotlib.
Скачать
👉 @python_360
❤3👍2
Шифрование и расшифровка паролей
Приведенный ниже скрипт выполняет шифрование и дешифрование текста с использованием пакета cryptography.
В приведенной выше реализации ключ шифрования генерируется с помощью метода
Шифрование и дешифрование текста выполняются с использованием класса Fernet из пакета cryptography, где текст шифруется с помощью метода
👉 @BookPython
Приведенный ниже скрипт выполняет шифрование и дешифрование текста с использованием пакета cryptography.
В приведенной выше реализации ключ шифрования генерируется с помощью метода
Fernet.generate_key()
и сохраняется в файле для дальнейшего использования.Шифрование и дешифрование текста выполняются с использованием класса Fernet из пакета cryptography, где текст шифруется с помощью метода
encrypt()
и расшифровывается с помощью метода decrypt()
.👉 @BookPython
👍6
Что будет в результате выполнения данного кода?
Данный код выдаст в виде результата пустой список
Как известно, попытка доступа к элементу списка с использованием индекса, превышающего число элементов (например, операция
Особенно неприятным это обстоятельство делает то, что оно может привести к ошибкам, которые действительно трудно отследить, поскольку во время выполнения кода не возникает никаких ошибок.
👉 @BookPython
Данный код выдаст в виде результата пустой список
[]
, а ошибка IndexError не возникнет.Как известно, попытка доступа к элементу списка с использованием индекса, превышающего число элементов (например, операция
list[10]
в списке выше), приводит к ошибке IndexError. Однако, попытка получить доступ к срезу списка с начальным индексом, превышающем количество элементов в списке, не приведет к IndexError и просто вернет пустой список.Особенно неприятным это обстоятельство делает то, что оно может привести к ошибкам, которые действительно трудно отследить, поскольку во время выполнения кода не возникает никаких ошибок.
👉 @BookPython
👍8
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
👍6❤1
Узнаем разницу в днях между датами представленными в виде строк
В данном коде мы используем функцию
👉 @BookPython
В данном коде мы используем функцию
strptime
из модуля datetime
, чтобы преобразовать строки в объекты datetime
. Затем мы вычисляем разницу между датами с помощью оператора - и получаем абсолютное значение разницы с помощью функции abs. Наконец, мы получаем разницу в днях, используя атрибут days
разницы объекта.👉 @BookPython
👍3
Объединение 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
👍2
Пишем микро-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
👍3
Какие нюансы есть в использовании чисел как ключей?
Числовые ключи в словарях подчиняются правилам сравнения чисел. Таким образом,
👉@BookPython
Числовые ключи в словарях подчиняются правилам сравнения чисел. Таким образом,
int(1)
и float(1.0)
считаются одинаковым ключом. Однако из-за того, что значения типа float
сохраняются приближенно, не рекомендуется использовать их в качестве ключей.👉@BookPython
👍3
Под капотом 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 задумывался своим автором Гвидо ван Россумом как...
👍2
benedict
Если вы столкнулись с трудностями при работе со словарями в Python, то benedict может стать тем решением, которое вы искали.
benedict наследуется от встроенного типа dict, что означает, что он полностью совместим с существующими словарями и может быть использован в качестве замены в большинстве случаев.
Одной из ключевых особенностей benedict является поддержка
👉@BookPython
Если вы столкнулись с трудностями при работе со словарями в Python, то benedict может стать тем решением, которое вы искали.
benedict наследуется от встроенного типа dict, что означает, что он полностью совместим с существующими словарями и может быть использован в качестве замены в большинстве случаев.
Одной из ключевых особенностей benedict является поддержка
keylists
и keypaths
. Это упрощает доступ к значениям в сложных словарях и работу с ними без необходимости вручную копаться во вложенных уровнях.👉@BookPython
👍7😁1