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

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

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

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
NetworkX

NetworkX — это библиотека Python для анализа сложных сетей. Она предоставляет структуры данных для работы с графами (сетями) и реализует множество алгоритмов для анализа и визуализации сетевых данных.

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

🔗 Python tricks
Переводим текст с английского на русский язык и преобразуем его в голосовое сообщение

Для перевода текста с английского на русский и преобразования его в голосовое сообщение, вы можете использовать библиотеки googletrans для перевода и gTTS (Google Text-to-Speech) для синтеза речи.

pip install googletrans==4.0.0-rc1
pip install gtts

🔗 Python tricks
Возврат нескольких значений из функции

Знаете ли вы, что можно осуществлять возврат нескольких значений из функции? Вот как это сделать.

🔗 Python tricks
Напишите функцию на Python, которая принимает корень бинарного дерева поиска и целое число k, и возвращает k-ый по величине элемент в этом дереве.

Условия:
Бинарное дерево поиска (BST) - это дерево, в котором каждый узел имеет не более двух детей, и для каждого узла его левое поддерево содержит только узлы с ключами, меньшими чем ключ узла, а правое поддерево - только узлы с ключами, большими чем ключ узла.
k всегда валидно и находится в пределах количества узлов в дереве.

Объяснение:
Функция kthSmallest принимает корень бинарного дерева и число k.
Вложенная функция inorder реализует обход дерева в порядке "лево-корень-право", что гарантирует получение элементов в порядке возрастания.
Рекурсивный вызов inorder собирает значения узлов в список.
Функция возвращает k-1 элемент этого списка, так как индексация в Python начинается с нуля.


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

🔗 Python tricks
Обработка ошибок во время выполнения

Это самый полезный совет для программистов, работающих с Python. Вы можете устранить ошибку и избавить программу от сбоев во время выполнения.

🔗 Python tricks
Используйте метод “Enumerate” Для элегантного перебора списков

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

Мы можем написать подобную логику на Python, но my_list[i] кажется немного неуместным, особенно когда нам нужно вызывать значение элемента много раз.

Реальный питоновский способ сделать это - использовать функцию enumerate() для получения как индекса, так и значений напрямую.

🔗 Python tricks
Добавление вложенных списков

Метод append() может работать и с вложенными списками, а не только с простыми.

Итак, у нас был список nested_list, внутри которого уже были два вложенных списка [[1, 2], [3, 4]].

Простой список добавляется во вложенный список как отдельный одинарный элемент.

🔗 Python tricks
argcomplete

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

argcomplete поддерживает не все оболочки по умолчанию, и вам может потребоваться настроить ее соответствующим образом для вашей среды выполнения.

🔗 Python tricks
__subclasshook__
__subclasshook__

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

Протокол subclasshook предоставляет способ определить подходит ли класс для использования в качестве подкласса заданного класса. Если метод возвращает True, то класс считается подклассом. Если метод возвращает NotImplemented, то это означает, что проверка должна быть выполнена с использованием стандартных правил.

🔗 Python tricks
Добавление элемента только при выполнении условия

Вы можете добавить условие для использования append(). Если условие выполняется или если условия нет, append() добавляет элемент в конец списка. Всё как обычно.

В этом примере, если temp больше 25, то метод append() добавляет элементы в конец списка numbers. В нашем случае, это 30 и 27.

🔗 Python tricks
Строки тоже итерируются

map() использует «дочернюю» функцию на любом объекте, где применим цикл for. Мы можем применять ее к любому итерируемому объекту, даже к strings.

Преобразуем все буквы в заглавные.

🔗 Python tricks
Отличие append() от extend()

Метод extend() также используется для добавления элементов в список, но в отличие от append(), он принимает итерируемый объект (например, другой список) и добавляет его элементы по отдельности.

Таким образом, метод extend() объединяет содержимое двух списков, тогда как метод append() просто добавляет новый элемент в конец списка.

Дело в том, что append() добавляет один элемент, в то время как extend() добавляет все элементы переданного списка поочередно.

🔗 Python tricks
map() + лямбды

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

Возведя все элементы списка ls в квадрат, мы получим такой результат.

🔗 Python tricks
Конкатенация списков с использованием append()

Когда мы используем append() с другим списком, происходит не конкатенация (слияние) списков в привычном понимании, а добавление одного списка как элемента в другой список.

Результат этого кода — list1 = [1, 2, 3, [4, 5, 6]]. Теперь list2 стал элементом последнего элемента списка list1.

🔗 Python tricks
self() для обращения объекта к себе

В данном случае self позволяет перемножить элементы списка на 2.

🔗 Python tricks
Загонка пользовательского ввода

Сотрудничество map(), input() и list() позволит поместить весь пользовательский текст в список. Это может пригодиться при расчете эмоциональной окраски текста, ведь слова предстоит потом возвращать к исходной форме

🔗 Python tricks
Функция math.gcd()

Функция math.gcd() используется для вычисления наибольшего общего делителя (НОД) двух целых чисел. НОД — это наибольшее число, которое является делителем обоих чисел.

Синтаксис:
math.gcd(a, b)

🔗 Python tricks
Библиотека Qiskit

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

Вы можете изучить документацию Qiskit для получения более подробной информации и примеров использования.

🔗 Python tricks
Twisted

Twisted — это асинхронный фреймворк для разработки сетевых приложений на языке Python. Он предоставляет реализацию множества протоколов, таких как TCP, UDP, SSL/TLS, DNS, и других, используя асинхронный стиль программирования.

Код выше создает TCP-сервер, прослушивающий порт 1234, и при подключении клиента создает экземпляр MyProtocol, который обрабатывает данные в методе dataReceived. В приведенном примере, сервер просто отправляет обратно полученные данные.

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

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

🔗 Python tricks
Недостатки map()

К недостаткам map(), так же как и в случае с filter(), можно отнести «ленивую оценку» (Lazy Evaluation). Создатели языка сделали немало в 3-й версии, чтобы улучшить производительность языка, и потому вместо обработанного объекта по умолчанию нам возвращается ссылка на итератор. Пока мы не обернем ее в list() или другой метод, обработка функцией-дочкой еще не произошла.

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

🔗 Python tricks