SQLite
SQLite — это легкая база данных. Поскольку для нее не требуется отдельный сервер базы данных, она часто используется для прототипирования или для небольших приложений. Данный код подключается к базе данных, хранящейся в файле с именем users.db. Предварительно создается файл, если он еще не существует. Ты можешь взаимодействовать с базой данных с помощью операторов SQL.
#практика
SQLite — это легкая база данных. Поскольку для нее не требуется отдельный сервер базы данных, она часто используется для прототипирования или для небольших приложений. Данный код подключается к базе данных, хранящейся в файле с именем users.db. Предварительно создается файл, если он еще не существует. Ты можешь взаимодействовать с базой данных с помощью операторов SQL.
#практика
SSE с помощью asyncio
Server Sent Events (SSE) - это однонаправленное соединение между сервером и клиентом (обычно веб-браузером), которое позволяет серверу «отправлять» информацию клиенту. Это очень похоже на веб-сокеты и длинный опрос. Основное различие между SSE и веб-сокетами заключается в том, что SSE является однонаправленным. Только сервер может отправлять информацию клиенту, тогда как в случае с веб-сокетами оба могут отправлять информацию друг другу. Обычно считается, что SSE намного проще в использовании/внедрении, чем веб-сокеты.
#практика
Server Sent Events (SSE) - это однонаправленное соединение между сервером и клиентом (обычно веб-браузером), которое позволяет серверу «отправлять» информацию клиенту. Это очень похоже на веб-сокеты и длинный опрос. Основное различие между SSE и веб-сокетами заключается в том, что SSE является однонаправленным. Только сервер может отправлять информацию клиенту, тогда как в случае с веб-сокетами оба могут отправлять информацию друг другу. Обычно считается, что SSE намного проще в использовании/внедрении, чем веб-сокеты.
#практика
Декоратор с аргументами
Декоратор может принять только один аргумент. Часто тебе понадобятся дополнительные аргументы. В таком случае ты можешь создать функцию, которая принимает произвольные аргументы и возвращает декоратор. С такими фабриками декораторов ты должен вызывать декоратор с парой круглых скобок, иначе выдаст ошибку.
#практика
Декоратор может принять только один аргумент. Часто тебе понадобятся дополнительные аргументы. В таком случае ты можешь создать функцию, которая принимает произвольные аргументы и возвращает декоратор. С такими фабриками декораторов ты должен вызывать декоратор с парой круглых скобок, иначе выдаст ошибку.
#практика
Cоздание водяного знака
Пакет Pillow позволяет добавлять водяные знаки на твои изображения. Для добавления водяного знака к изображению тебе понадобятся модули Image, ImageDraw и ImageFont из пакета Pillow. Модуль ImageDraw добавляет функциональность для рисования 2D-графики на новых или существующих изображениях. Модуль ImageFont используется для загрузки файлов растровых изображений, шрифтов TrueType и OpenType.
#практика
Пакет Pillow позволяет добавлять водяные знаки на твои изображения. Для добавления водяного знака к изображению тебе понадобятся модули Image, ImageDraw и ImageFont из пакета Pillow. Модуль ImageDraw добавляет функциональность для рисования 2D-графики на новых или существующих изображениях. Модуль ImageFont используется для загрузки файлов растровых изображений, шрифтов TrueType и OpenType.
#практика
Удаление начальных и конечных символов из строки
Предусмотрены три метода, которые позволяют удалять начальные и конечные символы из строки: str.strip, str.rstrip и str.lstrip. Все три метода возвращают новый строковый объект с удаленными нежелательными символами. Первый метод удаляет все начальные и конечные символы. rstrip удаляет конечные символы, lstrip – начальные. По умолчанию удаляются пробелы.
#практика
Предусмотрены три метода, которые позволяют удалять начальные и конечные символы из строки: str.strip, str.rstrip и str.lstrip. Все три метода возвращают новый строковый объект с удаленными нежелательными символами. Первый метод удаляет все начальные и конечные символы. rstrip удаляет конечные символы, lstrip – начальные. По умолчанию удаляются пробелы.
#практика
👍1
Часовой пояс
Практически для любой проблемы, связанной с часовыми поясами, ты можешь использовать модуль pytz. Этот пакет предоставляет базу данных часовых поясов Олсона. Она является стандартом для информации о часовых поясах, используемой во многих языках и операционных системах. В данном примере мы выводим время в нашем регионе, а затем в часовом поясе Индии.
#практика
Практически для любой проблемы, связанной с часовыми поясами, ты можешь использовать модуль pytz. Этот пакет предоставляет базу данных часовых поясов Олсона. Она является стандартом для информации о часовых поясах, используемой во многих языках и операционных системах. В данном примере мы выводим время в нашем регионе, а затем в часовом поясе Индии.
#практика
Приоритетные очереди
Предположим, ты хочешь реализовать очередь, которая сортирует элементы по заданному приоритету. Она всегда возвращает элемент с наивысшим приоритетом при каждой операции извлечения. В данном примере класс PriorityQueue использует модуль heapq для реализации простой приоритетной очереди. Обрати внимание, как элементы с одинаковым приоритетом возвращаются в том же порядке, в котором они были вставлены в очередь.
#практика
Предположим, ты хочешь реализовать очередь, которая сортирует элементы по заданному приоритету. Она всегда возвращает элемент с наивысшим приоритетом при каждой операции извлечения. В данном примере класс PriorityQueue использует модуль heapq для реализации простой приоритетной очереди. Обрати внимание, как элементы с одинаковым приоритетом возвращаются в том же порядке, в котором они были вставлены в очередь.
#практика
Удаление повторов с сохранением порядка
Для избавления от дубликатов можно использовать set. Однако какой-либо порядок при использовании set не сохраняется. Если значения в последовательности можно хэшировать, проблема легко решается с помощью набора и генератора. Если ты пытаешься устранить дубликаты в последовательности нехешируемых типов (например, dicts), нужно внести небольшое изменение в код. Здесь цель аргумента key - указать функцию, которая преобразует элементы последовательности в хешируемый тип для обнаружения дубликатов.
#практика
Для избавления от дубликатов можно использовать set. Однако какой-либо порядок при использовании set не сохраняется. Если значения в последовательности можно хэшировать, проблема легко решается с помощью набора и генератора. Если ты пытаешься устранить дубликаты в последовательности нехешируемых типов (например, dicts), нужно внести небольшое изменение в код. Здесь цель аргумента key - указать функцию, которая преобразует элементы последовательности в хешируемый тип для обнаружения дубликатов.
#практика
👍1
Поиск и замена текста без учета регистра
Для выполнения текстовых операций без учета регистра ты можешь использовать модуль re и указать флаг re.IGNORECASE для различных операций. Обрати внимание на пример. Замена текста не будет соответствовать регистру совпавшего текста. Для исправления этого воспользуемся вспомогательной функцией matchcase. Она делает замену в зависимости от того, какие символы используются в тексте.
#практика
Для выполнения текстовых операций без учета регистра ты можешь использовать модуль re и указать флаг re.IGNORECASE для различных операций. Обрати внимание на пример. Замена текста не будет соответствовать регистру совпавшего текста. Для исправления этого воспользуемся вспомогательной функцией matchcase. Она делает замену в зависимости от того, какие символы используются в тексте.
#практика
👍1
Извлечение подмножества словаря
Для извлечения подмножества словаря воспользуемся генератором словарей (dict comprehension). В данном примере мы создаем два новых словаря. Один состоит из элементов со значениями больше 200. Второй состоит из заранее перечисленных элементов. Аналогично можно сделать с помощью создания кортежей, однако наш метод быстрее и немного проще для чтения.
#практика
Для извлечения подмножества словаря воспользуемся генератором словарей (dict comprehension). В данном примере мы создаем два новых словаря. Один состоит из элементов со значениями больше 200. Второй состоит из заранее перечисленных элементов. Аналогично можно сделать с помощью создания кортежей, однако наш метод быстрее и немного проще для чтения.
#практика
JavaScript теперь в телеграм!
JavaScript — самый популярный язык в мире, он используется в 95% всех сайтов, которые вообще существуют. Теперь у JS есть русскоязычный канал. Это первоисточник всего, что появляется в платных курсах и остальных ресурсов. Стоит подписаться!
JavaScript — самый популярный язык в мире, он используется в 95% всех сайтов, которые вообще существуют. Теперь у JS есть русскоязычный канал. Это первоисточник всего, что появляется в платных курсах и остальных ресурсов. Стоит подписаться!
Вычисления с большими числовыми массивами
Для любых сложных вычислений, связанных с массивами, используй библиотеку NumPy. Основная особенность NumPy заключается в том, что она предоставляет Python объект массива. Он более эффективен и лучше подходит для математических вычислений, чем стандартный список Python. В частности, скалярные операции выполняют операцию поэлементно. Выполнение математических операций, когда оба операнда являются массивами, применяет операцию ко всем элементам и создает новый массив. Применение математических операций ко всем элементам одновременно позволяет очень легко и быстро вычислять функции для всего массива.
#практика
Для любых сложных вычислений, связанных с массивами, используй библиотеку NumPy. Основная особенность NumPy заключается в том, что она предоставляет Python объект массива. Он более эффективен и лучше подходит для математических вычислений, чем стандартный список Python. В частности, скалярные операции выполняют операцию поэлементно. Выполнение математических операций, когда оба операнда являются массивами, применяет операцию ко всем элементам и создает новый массив. Применение математических операций ко всем элементам одновременно позволяет очень легко и быстро вычислять функции для всего массива.
#практика
Бродкастинг
Операции NumPy обычно выполняются с парами массивов поэлементно. В простейшем случае два массива должны иметь одинаковую форму. Бродкастинг ослабляет это ограничение. Рассмотрим пример, где первое значение у нас массив, а второе - скаляр. Второе значение растягивается во время операции в массив той же формы. В результате этого новые элементы – это копии оригинального скаляра. Преимущество бродкастинга заключается в том, что это дублирование значений на самом деле не происходит. Таким образом операции максимально эффективны с точки зрения памяти и вычислений.
#практика
Операции NumPy обычно выполняются с парами массивов поэлементно. В простейшем случае два массива должны иметь одинаковую форму. Бродкастинг ослабляет это ограничение. Рассмотрим пример, где первое значение у нас массив, а второе - скаляр. Второе значение растягивается во время операции в массив той же формы. В результате этого новые элементы – это копии оригинального скаляра. Преимущество бродкастинга заключается в том, что это дублирование значений на самом деле не происходит. Таким образом операции максимально эффективны с точки зрения памяти и вычислений.
#практика
Правила бродкастинга
Бродкастинг следует строгому набору правил, определяющих взаимодействие между двумя массивами. Первое правило: если два массива различаются по количеству измерений, форма массива с меньшим количеством измерений дополняется единицами на его передней (левой) стороне. Второе правило: если форма двух массивов не совпадает ни в одном измерении, массив с формой, равной 1 в этом измерении, растягивается для соответствия другой форме. Третье правило: если в каком-либо измерении размеры не совпадают и ни один из них не равен 1, возникает ошибка.
#практика
Бродкастинг следует строгому набору правил, определяющих взаимодействие между двумя массивами. Первое правило: если два массива различаются по количеству измерений, форма массива с меньшим количеством измерений дополняется единицами на его передней (левой) стороне. Второе правило: если форма двух массивов не совпадает ни в одном измерении, массив с формой, равной 1 в этом измерении, растягивается для соответствия другой форме. Третье правило: если в каком-либо измерении размеры не совпадают и ни один из них не равен 1, возникает ошибка.
#практика
Декартово произведение
Списковое включение может генерировать списки из декартова произведения двух или более итераций. Элементы, составляющие декартово произведение, представляют собой кортежи. Они состоят из элементов каждого входного итерируемого объекта. Результирующий список имеет длину, равную произведению длин входных итераций. В данном примере мы сортируем майки по двум цветам и трем размерам.
#практика
Списковое включение может генерировать списки из декартова произведения двух или более итераций. Элементы, составляющие декартово произведение, представляют собой кортежи. Они состоят из элементов каждого входного итерируемого объекта. Результирующий список имеет длину, равную произведению длин входных итераций. В данном примере мы сортируем майки по двум цветам и трем размерам.
#практика
Относительная неизменность кортежей
Кортежи содержат ссылки на объекты. Неизменяемость кортежей действительно относится к ссылкам, которые она содержит, и не распространяется на объекты, на которые ссылаются. Другими словами, если ссылки являются изменяемыми, они могут измениться, даже если сам кортеж не изменится. В данном примере значение кортежа изменяется в результате изменений объекта, на который он ссылается. Что никогда не может измениться в кортеже, так это идентификатор содержащихся в нем элементов.
#практика
Кортежи содержат ссылки на объекты. Неизменяемость кортежей действительно относится к ссылкам, которые она содержит, и не распространяется на объекты, на которые ссылаются. Другими словами, если ссылки являются изменяемыми, они могут измениться, даже если сам кортеж не изменится. В данном примере значение кортежа изменяется в результате изменений объекта, на который он ссылается. Что никогда не может измениться в кортеже, так это идентификатор содержащихся в нем элементов.
#практика
Поверхностная копия
Самый простой способ скопировать список — использовать встроенный конструктор для самого типа. Использование конструктора создает поверхностную копию. Самый внешний контейнер дублируется, но копия заполняется ссылками на те же элементы, которые содержатся в исходном контейнере. Это экономит память и не вызывает проблем, если все элементы являются неизменяемыми. Но если есть изменяемые элементы, это может привести к неприятным сюрпризам.
#практика
Самый простой способ скопировать список — использовать встроенный конструктор для самого типа. Использование конструктора создает поверхностную копию. Самый внешний контейнер дублируется, но копия заполняется ссылками на те же элементы, которые содержатся в исходном контейнере. Это экономит память и не вызывает проблем, если все элементы являются неизменяемыми. Но если есть изменяемые элементы, это может привести к неприятным сюрпризам.
#практика
3D-поверхность
В Python можно строить трехмерные графики благодаря импорту набора инструментов mplot3d, включенного в основную установку Matplotlib. После импорта этого подмодуля можно создать трехмерную ось, передав ключевое слово project='3d' любой из обычных процедур создания осей. Теперь ты можешь строить различные типы трехмерных графиков. Данный код демонстирует построение трехмерной поверхности, окрашенной в цветовую карту coolwarm. Поверхность делается непрозрачной с помощью antialiased=False. Также демонстрируется использование LinearLocator и пользовательского форматирования для меток деления оси Z.
#практика
В Python можно строить трехмерные графики благодаря импорту набора инструментов mplot3d, включенного в основную установку Matplotlib. После импорта этого подмодуля можно создать трехмерную ось, передав ключевое слово project='3d' любой из обычных процедур создания осей. Теперь ты можешь строить различные типы трехмерных графиков. Данный код демонстирует построение трехмерной поверхности, окрашенной в цветовую карту coolwarm. Поверхность делается непрозрачной с помощью antialiased=False. Также демонстрируется использование LinearLocator и пользовательского форматирования для меток деления оси Z.
#практика
WeakValueDictionary
Класс WeakValueDictionary реализует изменяемое сопоставление, в котором значения являются слабыми ссылками на объекты. Когда упомянутый объект удаляется сборщиком мусора в другом месте программы, соответствующий ключ автоматически удаляется из WeakValueDictionary. Это обычно используется для кэширования. В данном примере каждый сыр загружается из catalog в stock, реализованный как WeakValueDictionary. Однако все, кроме одного, исчезают со склада, как только каталог удаляется. Переменная цикла for является глобальной переменной и никогда не исчезнет, если ее явно не удалить.
#практика
Класс WeakValueDictionary реализует изменяемое сопоставление, в котором значения являются слабыми ссылками на объекты. Когда упомянутый объект удаляется сборщиком мусора в другом месте программы, соответствующий ключ автоматически удаляется из WeakValueDictionary. Это обычно используется для кэширования. В данном примере каждый сыр загружается из catalog в stock, реализованный как WeakValueDictionary. Однако все, кроме одного, исчезают со склада, как только каталог удаляется. Переменная цикла for является глобальной переменной и никогда не исчезнет, если ее явно не удалить.
#практика
Указание вывода
Для больших вычислений иногда полезно иметь возможность указать массив, в котором будет храниться результат вычисления. Вместо создания временного массива ты можешь использовать его для записи результатов вычислений непосредственно в то место памяти, где ты хочешь, чтобы они были. Это можно использовать даже с представлениями массива. Например, мы можем записать результаты вычисления в каждый другой элемент указанного массива. Если бы вместо этого мы написали y[::2] = 2 ^ x, это привело бы к созданию временного массива для хранения результатов 2 ^ x. За этим последовала бы вторая операция, копирующая эти значения в массив y. Это не имеет большого значения для такого небольшого вычисления, но для очень больших массивов экономия памяти за счет осторожного использования аргумента out может быть значительной.
#практика
Для больших вычислений иногда полезно иметь возможность указать массив, в котором будет храниться результат вычисления. Вместо создания временного массива ты можешь использовать его для записи результатов вычислений непосредственно в то место памяти, где ты хочешь, чтобы они были. Это можно использовать даже с представлениями массива. Например, мы можем записать результаты вычисления в каждый другой элемент указанного массива. Если бы вместо этого мы написали y[::2] = 2 ^ x, это привело бы к созданию временного массива для хранения результатов 2 ^ x. За этим последовала бы вторая операция, копирующая эти значения в массив y. Это не имеет большого значения для такого небольшого вычисления, но для очень больших массивов экономия памяти за счет осторожного использования аргумента out может быть значительной.
#практика