Простой Python | Программирование
141K subscribers
2.36K photos
48 videos
1.36K links
Заявки принимаются автоматически.
Лучший образовательный канал по Python.

По всем вопросам: @dimaa_dimaa (реклама)

Ссылка на канал: https://t.me/+T1i5nO0m_h01ZDky
.
РКН: https://vk.cc/cJ5box
Помощь:https://telega.in/c/+T1i5nO0m_h01ZDky
Download Telegram
Относительная неизменность кортежей

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

#практика
Поверхностная копия

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

#практика
3D-поверхность

В Python можно строить трехмерные графики благодаря импорту набора инструментов mplot3d, включенного в основную установку Matplotlib. После импорта этого подмодуля можно создать трехмерную ось, передав ключевое слово project='3d' любой из обычных процедур создания осей. Теперь ты можешь строить различные типы трехмерных графиков. Данный код демонстирует построение трехмерной поверхности, окрашенной в цветовую карту coolwarm. Поверхность делается непрозрачной с помощью antialiased=False. Также демонстрируется использование LinearLocator и пользовательского форматирования для меток деления оси Z.

#практика
WeakValueDictionary

Класс WeakValueDictionary реализует изменяемое сопоставление, в котором значения являются слабыми ссылками на объекты. Когда упомянутый объект удаляется сборщиком мусора в другом месте программы, соответствующий ключ автоматически удаляется из WeakValueDictionary. Это обычно используется для кэширования. В данном примере каждый сыр загружается из catalog в stock, реализованный как WeakValueDictionary. Однако все, кроме одного, исчезают со склада, как только каталог удаляется. Переменная цикла for является глобальной переменной и никогда не исчезнет, если ее явно не удалить.

#практика
Указание вывода

Для больших вычислений иногда полезно иметь возможность указать массив, в котором будет храниться результат вычисления. Вместо создания временного массива ты можешь использовать его для записи результатов вычислений непосредственно в то место памяти, где ты хочешь, чтобы они были. Это можно использовать даже с представлениями массива. Например, мы можем записать результаты вычисления в каждый другой элемент указанного массива. Если бы вместо этого мы написали y[::2] = 2 ^ x, это привело бы к созданию временного массива для хранения результатов 2 ^ x. За этим последовала бы вторая операция, копирующая эти значения в массив y. Это не имеет большого значения для такого небольшого вычисления, но для очень больших массивов экономия памяти за счет осторожного использования аргумента out может быть значительной.

#практика
Специализированные функции

В NumPy доступно большое количество универсальных функций: гиперболические тригометрические функции, побитовая арифметика, операторы сравнения, преобразование радианов в градусы, округление и остатки, и многое другое. Отличный источник более специализированных и малоизвестных универсальных функций — подмодуль scipy.special. Если ты хочешь вычислить какую-то непонятную математическую функцию, скорее всего, она реализована в scipy.special. Существует слишком много функций, чтобы перечислить их все. Данный пример показывает пару, которые могут возникнуть в контексте статистики.

#практика
Глубокая копия

Глубокие копии - дубликаты, которые не имеют общих ссылок на встроенные объекты. Модуль copy предоставляет функции deepcopy и copy, которые возвращают глубокие и поверхностные копии произвольных объектов. В данном примере мы создали простой класс Bus. Он представляет школьный автобус, который загружается пассажирами, а затем подбирает или высаживает пассажиров на своем маршруте.

#практика
👍1
Сортировка по строкам или столбцам

Полезной функцией алгоритмов сортировки NumPy является возможность сортировки по определенным строкам или столбцам многомерного массива. Делается это с использованием аргумента axis. Обрати внимание, каждая строка или столбец рассматривается как независимый массив. Любые отношения между значениями строки или столбца будут потеряны.

#практика
Это свершилось!

Известный профессор Стэнфордского университета Олег Бакей сделал канал для программистов.
Там он рассказывает о неочевидных вещах в изучении программирования и дает уникальную информацию.
Кладезь знаний тут: @codecademy
np.sort/np.argsort

Функция NumPy np.sort намного эффективнее, чем встроенные функции сортировки. Она используется для возвращения отсортированной версии массива без изменения ввода. Функция argsort вместо этого возвращает индексы отсортированных элементов. Первый элемент дает индекс наименьшего элемента, второе значение дает индекс второго наименьшего элемента и так далее. Затем эти индексы можно использовать для построения отсортированного массива, если это необходимо.

#практика
Bisect: поиск

bisect(haystack, needle) выполняет бинарный поиск needle в haystack. Он должен быть отсортированной последовательностью, чтобы найти позицию, в которую можно вставить needle, сохраняя при этом haystack в возрастающем порядке. Другими словами, все элементы, появляющиеся до этой позиции, меньше или равны needle. Ты можешь использовать результат bisect(haystack, needle) в качестве индексного аргумента для haystack.insert(index, needle). Однако использование insort выполняет оба шага и работает быстрее.

#практика
Bisect.insort

Сортировка – затратный процесс. Если у тебя есть отсортированная последовательность, лучше оставить ее такой. Для этого можно использовать bisect.insort. insort(seq, item) вставляет item в seq, чтобы сохранить последовательность в порядке возрастания. Как и bisect, insort принимает необязательные аргументы lo, hi, чтобы ограничить поиск подпоследовательностью. Существует также вариант insort left, который использует bisect left для поиска точек вставки.

#практика
Функция super

Функция super() в Python делает наследование классов более управляемым и расширяемым. Функция возвращает временный объект, который позволяет ссылаться на родительский класс по ключевому слову super. Другими словами, super() позволяет тебе создавать классы, которые легко расширяют функциональность ранее созданных классов без повторной реализации их функциональности.

#практика
Memoryview

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

#практика
divmod

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

#практика
reversed()

Функция reversed() возвращает обратный итератор данной последовательности. Это то же самое, что и метод iter(), но в обратном порядке. Последовательность может быть списком, кортежем, набором или словарем. Обрати внимание, reversed() выдает символы непосредственно из исходной строки. Другими словами, он не создает новую перевернутую строку, а считывает символы в обратном направлении из существующей. Такое поведение довольно эффективно с точки зрения потребления памяти и может стать фундаментальным преимуществом в некоторых ситуациях.

#практика
frozenset

Функция frozenset() возвращает неизменяемый объект frozenset, инициализированный элементами из заданного итерируемого объекта. Хотя элементы набора можно изменить в любое время, элементы фиксированного набора остаются неизменными после создания. Благодаря этому frozensets могут использоваться как ключи в dict или как элементы другого набора. Как и наборы, он не упорядочен.

#практика
np.partition

Иногда нас не интересует сортировка всего массива. Например, просто нужно найти K наименьших значений в массиве. NumPy позволяет это сделать с помощью np.partition. np.partition принимает массив и число K. Результатом является новый массив с наименьшими значениями K слева от элемента и оставшимися значениями справа. Внутри двух разделов элементы имеют произвольный порядок. Аналогично мы можем разбить по произвольной оси многомерный массив.

#практика
Скачивание видео с Youtube

С помощью библиотеки pytube ты можешь скачать видео с Youtube. Предварительно библиотеку надо установить с помощью pip install pytube. В данном примере продемонстрировано, как это можно реализовать. Дополнительно мы создали простой интерфейс с помощью tkinter.

#практика