Python tricks | Хитрости Питона
5.75K 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 tricks
Генерация QR-кода

QR-коды используются для кодирования и декодирования данных в машиночитаемую форму. Благодаря библиотеке pyqrcode ты можешь без проблем создавать QR-коды. Делимся кодом для генерации QR-кода.

🔗 Python tricks
Строки в апострофах и в кавычках

Строки в апострофах и в кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.
🔗 Python tricks
Строки в апострофах и в кавычках

Строки в апострофах и в кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.
🔗 Python tricks
PySnooper

PySnooper
это библиотека для отладки, которая позволяет логгировать каждую строку выполняемого кода вместе со значениями переменных. Она полезна, когда нужно понять, как работает код и где происходят изменения переменных.

Для использования необходимо декорировать функцию, которую нужно отладить с помощью @pysnooper.snoop(). Вид лога можно настроить с помощью параметров: variables — какие переменные отображать, depth — максимальная вложенность структур данных, prefix — префикс для каждой строки лога.

Результат использования pysnooper предоставлен на изображении.

🔗 Python tricks
Декоратор @frozen

Декоратор @frozen — это не встроенный декоратор, а часто используемый соглашение в библиотеках и коде на Python. Он используется для обозначения, что класс или объект должен быть неизменяемым (immutable). Неизменяемые объекты не могут быть изменены после создания. Это означает, что их атрибуты и состояние остаются постоянными, что может быть полезно во многих сценариях.

Преимущества неизменяемых объектов включают в себя упрощение работы с объектами в многозадачных приложениях, избегание побочных эффектов и более безопасную работу с объектами в разных частях кода.

🔗 Python tricks
Строки в тройных апострофах или кавычках

Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.
🔗 Python tricks
Почему при получаем исключение UnboundLocalError, хотя переменная имеет значение?

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

Когда последняя инструкция в foo присваивает новое значение переменной x, компилятор решает, что это локальная переменная. Следовательно, когда более ранний print пытается напечатать неинициализированную переменную, возникает ошибка.
🔗 Python tricks
Какие правила для глобальных и локальных переменных в 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