Python tricks | Хитрости Питона
5.74K subscribers
2.21K photos
26 videos
1 file
2.52K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

Сотрудничество: @SIeep_Token

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Какие правила для глобальных и локальных переменных в Python

В Python, переменные, на которые только ссылаются внутри функции, считаются глобальными. Если переменной присваивается новое значение где-либо в теле функции, считается, что она локальная, и, если вам нужно, то нужно явно указывать её глобальной.
🔗 Python tricks
Функция zlib.compress()

Функция zlib.compress() является частью стандартной библиотеки и предназначена для сжатия данных с использованием библиотеки сжатия данных Zlib.

Zlib — это библиотека, которая предоставляет алгоритмы сжатия данных. С её помощью можно уменьшить объем данных, что полезно, например, при передаче данных по сети или сохранении данных на диске, чтобы уменьшить потребление места.

Функция zlib.compress() принимает один аргумент — последовательность байтов (например, строку или байтовый объект) и возвращает сжатую версию этой последовательности.

🔗 Python tricks
Py-spy

Py-spy — это инструмент для профилирования производительности Python-приложений. Он предоставляет информацию о том, как Python-приложение использует центральный процессор (CPU) и может помочь вам выявить узкие места в вашем коде, которые могут приводить к высокому использованию CPU.

Py-spy можно использовать из командной строки, чтобы наблюдать за работой запущенных Python-процессов. Он предоставляет информацию о потреблении CPU, вызовах функций, стеке вызовов и других характеристиках производительности. Вы можете использовать py-spy для оптимизации вашего Python-кода и выявления проблем с производительностью.

🔗 Python tricks
Почему анонимные функции (lambda), определенные в цикле с разными значениями, возвращают один и тот же результат

Это случается, поскольку x не является локальной для lambda, а определена во внешней области видимости, и получается тогда, когда она вызывается - а не когда определяется.

В конце цикла, x=4, поэтому все функции возвращают 4**2, то есть 16. Это можно также проверить, изменив значение x и посмотрев на результат
🔗 Python tricks
Как организовать совместный доступ к глобальным переменным для нескольких модулей

Канонический способ организовать подобный доступ - это создать отдельный модуль (часто называемый config или cfg). Просто добавьте import config в каждый модуль приложения. При этом модуль становится доступен через глобальное имя. Поскольку существует только один экземпляр модуля, любые изменения, произведённые в модуле отражаются везде.
🔗 Python tricks
Annoy

Annoy (Approximate Nearest Neighbors Oh Yeah) — это библиотека, которая используется для поиска точек в пространстве, близких к заданной точке запроса. Она также создает большие файловые структуры данных только для чтения, которые отображаются в память, чтобы многие процессы могли использовать одни и те же данные.

В этом примере мы создаем индекс Annoy с длиной вектора элемента f и используем расстояние angular. Затем мы добавляем 1000 элементов со случайными значениями в индекс и строим его с использованием 10 деревьев. После этого мы сохраняем индекс в файл test.ann. Затем мы загружаем индекс из файла и выполняем поиск 1000 ближайших соседей для элемента с индексом 0.

Результат работы кода - список из 1000 индексов элементов, которые являются ближайшими соседями для элемента с индексом 0.
🔗 Python tricks
Emot

Emot (Emotional Analysis for Text) — это библиотека для анализа эмодзи на Python. Она может быть полезна для обработки данных текста, чтобы удалить эмодзи и других задач, связанных с анализом эмотиконами.

Чтобы использовать библиотеку Emot, вам сначала нужно установить её с помощью pip:

pip install emot

🔗 Python tricks
Динамическая загрузка модуля

Динамическая загрузка модуля в Python — это процесс импорта модуля во время выполнения программы, в отличие от статического импорта, который выполняется на этапе компиляции. Это может быть полезно, если вы хотите загружать модули в зависимости от условий или пользовательского ввода, чтобы сделать вашу программу более гибкой.

Обратите внимание, что для динамической загрузки модуля он должен быть доступен в пути поиска модулей Python, например, находиться в том же каталоге, где выполняется ваш скрипт, или в путях, указанных в переменной sys.path.

Также обратите внимание, что динамическая загрузка модулей может быть мощным инструментом, но она также может привести к проблемам безопасности, если модули загружаются из ненадежных источников. Убедитесь, что вы проверяете и фильтруете ввод, который вы используете для определения имени модуля, чтобы избежать потенциальных уязвимостей.

🔗 Python tricks
Theano

Theano — это библиотека для глубокого обучения и численных вычислений, написанная на языке Python. Theano предоставляет инструменты для оптимизации и вычисления матричных операций, что делает его полезным инструментом для работы с нейронными сетями и другими вычислительными задачами. Однако стоит отметить, что Theano больше не активно развивается и поддерживается, и многие из его функциональных возможностей были интегрированы в другие библиотеки глубокого обучения, такие как TensorFlow и PyTorch.

🔗 Python tricks
LightGBM

LightGBM (Light Gradient Boosting Machine) — это библиотека для машинного обучения, которая специализируется на градиентном бустинге и предоставляет выдающуюся производительность и эффективность. Она была разработана Microsoft и предназначена для решения задач классификации, регрессии и ранжирования. LightGBM быстро стала популярной в машинном обучении благодаря скорости, эффективности, поддержки множества задач, а главное градиентному бустингу.

Использование LightGBM в Python, как описано в предыдущем ответе, позволяет легко интегрировать эту библиотеку в ваши проекты машинного обучения и проводить высококачественный анализ данных и прогнозирование.
🔗 Python tricks
Как правильнее использовать импортирование

В общих случаях не используйте from modulename import *. Это засоряет пространство имён того, кто импортирует. Некоторые люди избегают этой идиомы даже для тех немногих модулей, которые были спроектированны, чтобы так импортироваться. Это такие модули как Tkinter и threading.

Импортируйте модули в начале файла. Это отвечает на вопрос, какие модули требует Ваш код и находится ли имя модуля в области видимости. Запись по одному импорту на строку упрощает добавление и удаление операторов импорта, но множественный импорт будет занимать меньше места на экране.
🔗 Python tricks
Почему значения по умолчанию разделяются между объектами

Часто ожидается, что вызов функции создаёт новые объекты для значений по умолчанию. Но это не так. Значения по умолчанию создаются лишь однажды, когда функция определяется. Если этот объект изменяется, как словарь в нашем примере, последующие вызовы функции будут использовать изменённый объект.

По определению, неизменяемые объекты (числа, строки, кортежи и None), безопасны при изменении. Изменение изменяемых объектов, таких как словари, списки, и экземпляры пользовательских классов может привести к неожиданным последствиям.
🔗 Python tricks
Как передать опциональные или именованные параметры из одной функции в другую

Получить такие параметры можно с помощью спецификаторов * и в списке аргументов функции; они возвращают кортеж позиционных аргументов и словарь именованых параметров. После этого Вы можете передать их в другую функцию, используя в её вызове * и
🔗 Python tricks
divmod

Метод divmod() принимает два числа в качестве аргументов и возвращает их частное и остаток в виде кортежа. В качестве вводных чисел могут быть как целые числа, так и с плавающей запятой. Если же использовать не числовые значения, выдается ошибка TypeError.

🔗 Python tricks
Как скопировать объект в Python

В общем случае, с помощью модуля copy.

Некоторые объекты можно скопировать более просто. Словари имеют метод copy.

Последовательности могут быть скопированы путём срезов.
🔗 Python tricks
Geoplotlib

Geoplotlib — это библиотека Python, предназначенная для создания интерактивных карт и визуализации геоданных. Она предоставляет простой и удобный способ создания различных карт, включая точечные карты, карты с тепловыми картами, кластеризацию данных и другие географические визуализации.

Перед началом работы установите и импортируйте библиотеку. Чтобы визуализировать геоданные, вам понадобятся данные о географических координатах (широте и долготе). Вы можете использовать различные источники данных, такие как CSV-файлы, базы данных или API.

🔗 Python tricks
img2pdf

img2pdf — это библиотека Python, которая позволяет создавать файлы PDF из изображений. Для использования img2pdf вам нужно установить библиотеку (если она не установлена) и затем использовать ее для создания PDF-файлов из изображений.

Замените image1.jpg, image2.png, и image3.jpeg из примера на имена файлов с вашими изображениями, которые вы хотите объединить в PDF. Затем запустите этот скрипт, и он создаст файл output.pdf, содержащий ваши изображения в виде страниц PDF.

Убедитесь, что у вас установлены все необходимые библиотеки и что изображения находятся в том же каталоге, где находится ваш Python-скрипт, или укажите полные пути к изображениям в переменной image_files.

🔗 Python tricks
Метод dict.values()

Метод dict.values() в Python используется для получения всех значений (values) в словаре (dictionary). Этот метод возвращает представление (view) значений в словаре в виде объекта типа dict_values.

Этот метод полезен, когда вы хотите получить доступ к значениям словаря, но не обязательно к ключам. Вы можете использовать dict.values() в циклах или для выполнения операций на значениях словаря, например, суммирования всех значений или поиска определенного значения.

🔗 Python tricks
Как создавать функции более высокого порядка

Есть два пути: использовать вложенные функции или вызываемые объекты.

Использование вызываемого объекта - немного медленнее, и в результате получается больше кода. Однако, заметьте, что несколько функций могут разделять свою сигнатуру с помощью наследования.

Объект может сохранять свое состояние для нескольких вызовов.
🔗 Python tricks
Почему изменение списка 'y' изменяет также список 'x'

Вы, возможно, будете удивлены тому, что добавление в y изменяет также и x.
Два факта приводят к такому результату:
• Переменные - это просто ссылки на объекты. y = x не создаёт копию списка - это просто создаёт переменную y, которая ссылается на тот же объект, что и x.
• Списки изменяемы.
🔗 Python tricks
Как можно узнать имя объекта

Вообще говоря, никак, поскольку объекты в действительности не имеют имён. Важно: присваивание всегда связывает имя с объектом. Это верно и для инструкций def и class.

Возможно, класс имеет имя: однако, хотя он связан с двумя именами и запрашивается через имя B, созданный экземпляр всё ещё считается экземпляром класса A. Однако, невозможно сказать, имя экземпляра a или b, поскольку оба они связаны с одним и тем же значением.
🔗 Python tricks