Библиотека питониста | Python, Django, Flask
40.5K subscribers
2.77K photos
75 videos
51 files
4.35K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://t.me/proglibrary/9197

Курс по ML: https://cl

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
Копирование словарей и других объектов

Новички часто допускают такую ошибку при создании копии списка:
lst2 = lst1

При работе с одним из словарей оказывается, что изменяются оба.

Почему так происходит?
Об этом — в завтрашнем посте. Пока что расскажу, как этого избежать:

У списка существует специальный метод copy(), который нужен как раз для таких случаев.

Но подобное работает не всегда! Если имеется множество вложенных списков, то надо сделать полное копирование импортировав модуль copy и воспользовавшись методом deepcopy().
Почему присвоение не является копированием?

В python все является объектом. В этом легко убедится воспользовавшись функцией dir().

При присвоении в новую переменную отправляется ссылка на объект. А при изменении объекта ссылка на него не меняется.

Тут многие могут спросить про строки и числа, поэтому отвечаю — с ними то же самое. Просто при операциях не изменяется старый объект, а создается новый. Все это можно проследить воспользовавшись функцией id(), которая показывает номер объекта.

Интересно то, что за частью чисел в языке на программном уровне закреплена ссылка на объект. Можете попробовать сами.
В одну строчку

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

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

Примеры списочных выражений на картинке. В следующий раз не придется набирать одинаковый текст несколько раз.
🐍 Где изучать Python в 2021 году: 78 ресурсов для начинающих

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

https://proglib.io/sh/8yFI5qaeCb
Кругом только и слышно, что об искусственном интеллекте, машинном обучении, Data Science... Но как начинаешь разбираться, нужна серьёзная математическая подготовка на уровне вуза. Мы пригласили опытных преподавателей МГУ помочь нашим читателям подготовиться к карьере дата сайентиста.

В наборе всё, что нужно: мат. анализ, линейная алгебра, комбинаторика, теория вероятностей и мат. статистика. Кстати, именно такой багаж знаний требуют от абитуриентов ШАД. Каждая тема сопровождается подготовительными материалами, лекциями и практическими заданиями. Всё это с обратной связью кураторов и преподавателей.

Полная программа курса и прочая информация здесь

Специально для наших подписчиков скидка 15% по промокоду PYPROGLIB
Поспешите, осталось всего 9 мест.
Библиотека Numpy

Библиотека облегчающая работу со списками. Работает намного быстрее стандартных методов за счет написания на более быстром С и Фортран. Однако работает не со списками, а с массивами (все объекты одного типа).

При простом вычислении квадратного корня от 0 до 10^6 python затрачивает примерно 0.38 секунды, если вы выберите самый хороший способ - map. Быстро да? При худших способах способах время тоже не сильно упадет еще больше до 0.64 секунды. Но с помощью Numpy можно улучшить первый результат в 10 раз!

Из-за быстроты и огромного потенциала используют в машинном обучении и Big Data, ведь, библиотека обрабатывает данные.
В одну строку - итератор

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

Итератор - объект, который хранит начало, конец, текущий элемент и правило преобразований. В итоге мы можем получать только новые значения.

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

Вы уже точно знаете один итератор и даже пользуетесь им - range().

А есть еще один очень полезный - map(). Он принимает два аргумента, функцию для задания правила преобразования и что-то, что требуется преобразовать.
«Лаборатория Касперского» открывает набор на стажировку SafeBoard. Это отличная возможность бодро начать карьеру в IT еще до окончания вуза — успей подать заявку.

Главное о стажировке:
• Проходит в московском офисе и открыта для студентов любых ВУЗов и курсов;
• Совместима с учебой — гибкий график 20 часов в неделю. Можно и больше, если есть желание и возможность: до 35 часов — в учебное время, до 40 часов — летом.
• Длится год;
• Оплачивается (а еще стажерам ежемесячно компенсируют расходы на питание, предоставляют бесплатный unlim-доступ к спортзалу и ко всем открытым мероприятиям).

Набор ведется на направления:
• Разработка (С++);
• Разработка (C#/Python/Go);
• Разработка (Scala/Java/Python/Go);
• Тестирование (Python/ручное);
• Системный анализ;
• Системное администрирование;
• Mobile;
• Data Science;
• Анализ вредоносного ПО;
• Пентест.

Лучшие участники получат приглашение на работу.

Подать заявку: https://kas.pr/cjg8
Функции map(), filter() и reduce() используют, чтобы привнести в Python немного функционального программирования.

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

1. map() - функция map перебираeт все элементы в данном итеративном объекте и выполняeт функцию, которую мы передали в качестве аргумента для каждого из них.

2. filter() - Подобно map(), filter() принимает объект функции и итерацию и создает новый список. Как следует из названия, filter() формирует новый список, содержащий только элементы, удовлетворяющие определенному условию.

3. reduce() - reduce работает иначе, чем map() и filter(). Он не возвращает новый список, основанный на функции и итерации, которые мы передали.
Вместо этого он возвращает одно значение. На картинке мы приводим пример сложения чисел. Но это самое простейшее. Можно перемножать, возводить в квадрат и многое другое (и не обязательно с числами).
List Comprehensions

Удаление элемента из списка во время его итерации – это проблема, которая хорошо известна любому опытному разработчику.

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

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

Заметьте, что в примере "забывается" старый список и на его месте появляется новый.
Mодуль cmath

Функции в математическом модуле стандартной библиотеки Python обрабатывают числа с плавающей запятой. Для комплексных чисел библиотека Python содержит модуль cmath.

📌Функция polar():
Эта функция возвращает полярное представление декартовой записи комплексного числа. Возвращаемое значение - это кортеж, состоящий из модуля и фазы.

📌Функция phase():
Эта функция возвращает угол против часовой стрелки между осью x и сегментом, соединяющим точку с исходной точкой. Угол представлен в радианах и находится между π и -π.

📌Функция rect():
Эта функция возвращает декартово представление комплексного числа, представленного в полярной форме, то есть по модулю и фазе.

📌Функция sin():
Эта функция возвращает тригонометрическое соотношение синуса фазового угла, представленного в радианах.
Методов списков list

Напоминаю, списки в Python – упорядоченные последовательности элементов различных типов данных. Списки можно изменять, например, добавлять новые элементы.

1. list.append(x) – добавляет элемент, переданный в качестве аргумента, в конец списка. Этот метод является самым простым и распространённым в коде.

2. list.insert(i, x) – вставляет элемент в переданную позицию. Первый аргумент означает индекс элемента, перед которым будет добавлено новое значения.

Таким образом, list.insert(0, x) вставит элемент в начало списка, а list.insert(len(list), x) эквивалентно записи list.append(x).

3. list.extend(iterable) – расширяет список, добавляя все элементы другой коллекции.
Библиотека Numpy "Базовые операции"

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

Даже фильтрация возможна простейшим знаком. В массивах можно не перебирать через итератор filters, а просто поставить нужный знак.

Доступны так же математические операции: синус, косинус и подобные.
Стеки

Стек — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).

Методы встроенного списка в Python позволяют очень легко использовать список в виде стека. Чтобы добавить элемент на вершину стека, используйте append(). Чтобы извлечь элемент из верхней части стека, используйте pop() без явного индекса.

Кажется, что это не пригодится, но многие задачи хорошо решаются через pop, а главное, junior обязан знать такой простой способ и его применение. На собеседовании может встретится.
Библиотека Numpy

При создании массивом мы получаем тип ndarray.

Рассмотрим наиболее часты атрибуты (не методы!) применимые к массивам:

ndim - число измерений (чаще их называют "оси") массива.

shape - размеры массива, его форма. Это кортеж натуральных чисел, показывающий длину массива по каждой оси. Для матрицы из n строк и m столбов, shape будет (n,m). Число элементов кортежа shape равно ndim.

size - количество элементов массива. Очевидно, равно произведению всех элементов атрибута shape.

dtype - объект, описывающий тип элементов массива

itemsize - размер каждого элемента массива в байтах.

data - буфер, содержащий фактические элементы массива. Обычно мы этот атрибут не используем, так как обращаться к элементам массива проще всего с помощью индексов.
Функция sum()

Как бы вы решили задачу получения суммы элементов списка без обхода элементов в цикле?

Это можно сделать с помощью стандартной функции sum().
Параметры sum():
iterable - итерируемые типы (list ,dict, tuple, и.т.д.)
start - (необязательно) значение этого параметра прибавляется к уже готовой сумме элементов iterable. По умолчанию значение этого параметра 0.

Возвращаемое значение из sum():
sum() возвращает сумму start и элементов всех последующих элементов.
High Performance Python (2020)
Автор: Micha Gorelick, Ian Ozsvald
Количество страниц: 468

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

Скачать книгу
Перечисления

Python3
поддерживает простой механизм работы с перечислениями. Спасибо классу Enum.

Перечисления удобно использовать для хранения списков констант. Иначе константы беспорядочно расположены в коде.

Из документации по Python 3 можно узнать о том, что перечисление — это набор символических имён, привязанных к уникальным, неизменным значениям. Члены одного перечисления можно сравнивать на идентичность. Перечисления можно перебирать (итерировать).

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

#enum