Продвинутая работа со списками
При работе со списками крайне полезно знать как правильно формировать срезы списка. В приложениях, активно использующих группы данных - срезы незаменимый инструмент.
В общей форме формирования среза выглядит следующим образом:
Комбинации параметров помогут достичь необходимого результата.
Подписывайтесь на канал 👉@pythonofff
При работе со списками крайне полезно знать как правильно формировать срезы списка. В приложениях, активно использующих группы данных - срезы незаменимый инструмент.
В общей форме формирования среза выглядит следующим образом:
list[start:end:step]
Комбинации параметров помогут достичь необходимого результата.
Подписывайтесь на канал 👉@pythonofff
Как удалить пустые строки из массива в python?
Пустые строки можно удалить их из массива с помощью функции filter().
Подписывайтесь на канал 👉@pythonofff
Пустые строки можно удалить их из массива с помощью функции filter().
arr = ["тест", "", "тест123"]
arr = list(filter(len, arr))
# Вывод: ['тест', 'тест123']
print(arr)
Подписывайтесь на канал 👉@pythonofff
all и any
Полезные функции, которые помогут узнать есть ли определенные значения в объекте.
all возвращает True, если все объекты равны True или удовлетворяют условию.
any в свою очередь делает то же самое, но возвращает True, если хотя бы один равен True.
Теперь нет необходимости перебирать списки, достаточно использовать данные функции.
Подписывайтесь на канал 👉@pythonofff
Полезные функции, которые помогут узнать есть ли определенные значения в объекте.
all возвращает True, если все объекты равны True или удовлетворяют условию.
any в свою очередь делает то же самое, но возвращает True, если хотя бы один равен True.
Теперь нет необходимости перебирать списки, достаточно использовать данные функции.
Подписывайтесь на канал 👉@pythonofff
Примеры использования модуля os в Python
Функция
Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать
После этого мы изменили папки, при помощи
Подписывайтесь на канал 👉@pythonofff
os.chdir()
и os.getcwd()
Функция
os.chdir
позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии.Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать
os.getcwd()
. Указанный код демонстрирует нам, что мы открыли директорию по умолчанию в Пайтоне, после запуска данного кода в IDLE.После этого мы изменили папки, при помощи
os.chdir()
.Подписывайтесь на канал 👉@pythonofff
Создание функций на основе других с "замороженными" параметрами
Привет, сегодня поговорим про очень важную функцию
Данная функция принимает в качестве первого аргумента любую другую функцию, а дальше параметры, которые будут автоматически переданы в эту функцию при вызове уже новой функции, которую вернёт partial.
Например, можем создать функцию, которая умножает два числа, а потом "заморозить" один аргумент, как на картинке.
Подписывайтесь на канал 👉@pythonofff
Привет, сегодня поговорим про очень важную функцию
partial
из пакета functools
. Более подробно мы рассказываем про это в курсе, но сейчас дадим краткое описание работы.Данная функция принимает в качестве первого аргумента любую другую функцию, а дальше параметры, которые будут автоматически переданы в эту функцию при вызове уже новой функции, которую вернёт partial.
Например, можем создать функцию, которая умножает два числа, а потом "заморозить" один аргумент, как на картинке.
Подписывайтесь на канал 👉@pythonofff
Как обрабатывать исключения?
Обработка исключений в Пайтон – это очень просто. Потратим немного времени и напишем несколько примеров, которые их вызовут. Мы начнем с одной из самых элементарных проблем: деление на ноль.
Если мы обратимся к урокам элементарной математики, то вспомним, что на ноль делить нельзя. В Пайтоне данная операция вызовет ошибку, как мы можем видеть в примере выше. Чтобы поймать ошибку, мы завернем операцию в оператор
Подписывайтесь на канал 👉@pythonofff
Обработка исключений в Пайтон – это очень просто. Потратим немного времени и напишем несколько примеров, которые их вызовут. Мы начнем с одной из самых элементарных проблем: деление на ноль.
Если мы обратимся к урокам элементарной математики, то вспомним, что на ноль делить нельзя. В Пайтоне данная операция вызовет ошибку, как мы можем видеть в примере выше. Чтобы поймать ошибку, мы завернем операцию в оператор
try/except
.Подписывайтесь на канал 👉@pythonofff
Функция itertools.cycle
Напоминаю, что у нас всё ещё идёт набор на курс, который начинается уже в этот понедельник. А сейчас покажу вам кое-что интересное из курса.
В лекции, посвященной итераторам и генераторам, мы также показываем полезные функции из пакета itertools. К примеру, метод
А далее, например, можно воспользоваться
Подписывайтесь на канал 👉@pythonofff
Напоминаю, что у нас всё ещё идёт набор на курс, который начинается уже в этот понедельник. А сейчас покажу вам кое-что интересное из курса.
В лекции, посвященной итераторам и генераторам, мы также показываем полезные функции из пакета itertools. К примеру, метод
cycle
из последовательности ['red', 'white', 'blue']
генерирует повторяющуюся бесконечную.А далее, например, можно воспользоваться
islice
. Он возвращает конечный итератор из любой большой или даже бесконечной последовательности.Подписывайтесь на канал 👉@pythonofff
Класс collections.deque
Класс deque реализует двухконечную очередь, которая поддерживает добавление и удаление элементов с обоих концов в течение О(1) времени.
Объекты deque представлены в виде двусвязных списков, что дает им превосходную производительность для входящих и выходящих элементов, но при этом у него плохая производительность O(n) при работе со случайно принимаемыми элементами в середине очереди.
В связи с тем, что deque поддерживает вставку и удаление элементов одинаково хорошо, они могут поддерживать и очереди и стеки
Подписывайтесь на канал 👉@pythonofff
Класс deque реализует двухконечную очередь, которая поддерживает добавление и удаление элементов с обоих концов в течение О(1) времени.
Объекты deque представлены в виде двусвязных списков, что дает им превосходную производительность для входящих и выходящих элементов, но при этом у него плохая производительность O(n) при работе со случайно принимаемыми элементами в середине очереди.
В связи с тем, что deque поддерживает вставку и удаление элементов одинаково хорошо, они могут поддерживать и очереди и стеки
collections.deque
это отличное решение, если вы ищите структуру данных очереди в Python в стандартной библиотеке.Подписывайтесь на канал 👉@pythonofff
Простая обрезка изображения в Pillow
Обозначим область обрезки изображения с помощью кортежа box=(left, upper, right, lower).
Верхней левой координате соответствует (x, y) = (left, upper), а нижней правой — (x, y) = (right, lower). Область, которую нужно обрезать — left <= x <right и upper <= y <lower, а пиксели x = right и y = lower не включаются.
Не забудьте, что box используется вместе со скобками ().
Подписывайтесь на канал 👉@pythonofff
Обозначим область обрезки изображения с помощью кортежа box=(left, upper, right, lower).
Верхней левой координате соответствует (x, y) = (left, upper), а нижней правой — (x, y) = (right, lower). Область, которую нужно обрезать — left <= x <right и upper <= y <lower, а пиксели x = right и y = lower не включаются.
Не забудьте, что box используется вместе со скобками ().
Подписывайтесь на канал 👉@pythonofff
Делаем многоуровневый словарь плоским при помощи собственной рекурсивной функции
Быстрый поиск в Google приводит нас на StackOverflow. Первый же ответ предлагает рекурсивную функцию, которая перебирает словарь и возвращает «уплощенный» экземпляр. Вдохновившись этой функцией, давайте создадим немного более продвинутую версию.
Можем начать с
Подписывайтесь на канал 👉@pythonofff
Быстрый поиск в Google приводит нас на StackOverflow. Первый же ответ предлагает рекурсивную функцию, которая перебирает словарь и возвращает «уплощенный» экземпляр. Вдохновившись этой функцией, давайте создадим немного более продвинутую версию.
Можем начать с
type hinting
(явного указания типов). Это улучшит читаемость и сделает код типобезопасным.Подписывайтесь на канал 👉@pythonofff
Метод items()
Метод
Синтаксис
Данный метод не принимает никаких аргументов.
Приведем пример использования данной функции.
Объявлен словарь с именем products. Ключи содержат названия продуктов, а значения — их цены. Используем для нашего словаря метод items() и сохраним в другой переменной с именем itemlist, а затем выведем на экран.
Подписывайтесь на канал 👉@pythonofff
Метод
items()
используется для возврата списка кортежей с парами всех ключей и значений словаря.Синтаксис
:dictionary.items()
Данный метод не принимает никаких аргументов.
Приведем пример использования данной функции.
Объявлен словарь с именем products. Ключи содержат названия продуктов, а значения — их цены. Используем для нашего словаря метод items() и сохраним в другой переменной с именем itemlist, а затем выведем на экран.
Подписывайтесь на канал 👉@pythonofff
Коротко о том, что такое метаклассы
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
На скрине, самая простая реализация метакласса, которая ничего не делает.
Подписывайтесь на канал 👉@pythonofff
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
На скрине, самая простая реализация метакласса, которая ничего не делает.
Подписывайтесь на канал 👉@pythonofff
Нелокальная переменная во вложенной функции
Прежде чем перейти к тому, что такое замыкание, мы должны сначала понять, что такое вложенная функция и нелокальная (
Функция, определенная внутри другой функции, называется вложенной функцией. Вложенные функции могут получать доступ к переменным из локальной области видимости объемлющих функций (
В Python нелокальные переменные по умолчанию доступны только для чтения. Если нам необходимо их модифицировать, то мы должны объявить их явно как нелокальные (используя ключевое слово nonlocal).
Подписывайтесь на канал 👉@pythonofff
Прежде чем перейти к тому, что такое замыкание, мы должны сначала понять, что такое вложенная функция и нелокальная (
nonlocal
) переменная.Функция, определенная внутри другой функции, называется вложенной функцией. Вложенные функции могут получать доступ к переменным из локальной области видимости объемлющих функций (
enclosing scope
).В Python нелокальные переменные по умолчанию доступны только для чтения. Если нам необходимо их модифицировать, то мы должны объявить их явно как нелокальные (используя ключевое слово nonlocal).
Подписывайтесь на канал 👉@pythonofff
Что делают OrderedDict и fromkeys()?
Параметры:
seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
value: Опционально; если задать, значение будет установлено в качестве value.
Подписывайтесь на канал 👉@pythonofff
OrderedDict
это словарь, который запоминает порядок вставки ключей. Если новое вхождение перезаписывает существующее вхождение, исходная позиция вставки остается неизменной.fromkeys()
создает новый словарь и возвращает список ключей. Ключи для нового словаря берутся из seq, а значения — из value (если заданы). Синтаксис метода fromkeys()
— fromkeys(seq[, value])
.Параметры:
seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
value: Опционально; если задать, значение будет установлено в качестве value.
Подписывайтесь на канал 👉@pythonofff
Используем lambda, sum() и map()
Лямбда-функция в Python — это просто функция Python. Но это некий особенный тип с ограниченными возможностями.
Лямбда-функции вместе с
Подписывайтесь на канал 👉@pythonofff
Лямбда-функция в Python — это просто функция Python. Но это некий особенный тип с ограниченными возможностями.
Лямбда-функции вместе с
sum()
и map()
также могут решить конкретно эту задачу подсчета общего числа вхождений определенного элемента в строку. Этот метод использует sum()
для суммирования всех вхождений, полученных с помощью map()
.Подписывайтесь на канал 👉@pythonofff
Используем collection.Counter ()
Это менее известный метод для получения количества вхождений элемента в любой контейнер в Python. Он также выполняет задачу, аналогичную описанным выше двум методам, просто является функцией другой библиотеки, т.е. collections.
Класс
Счетчик может быть любым целочисленным значением, включая ноль или отрицательное число. Класс
Подписывайтесь на канал 👉@pythonofff
Это менее известный метод для получения количества вхождений элемента в любой контейнер в Python. Он также выполняет задачу, аналогичную описанным выше двум методам, просто является функцией другой библиотеки, т.е. collections.
Класс
Counter()
модуля collections - это подкласс словаря dict для подсчета хеш-объектов (неизменяемых, таких как строки, числа, кортежи и т.д.). Это коллекция, в которой элементы хранятся в виде словарных ключей, а их счетчики хранятся в виде значений словаря.Счетчик может быть любым целочисленным значением, включая ноль или отрицательное число. Класс
collections.Counter()
похож на мультимножества в других языках программирования.Подписывайтесь на канал 👉@pythonofff
Регулярные выражения (REGEX)
Регулярные выражения — более гибкий способ нахождения подстрок в строках. В Python есть встроенный модуль, позволяющий работать с регулярными выражениями, — re. Модуль re содержит функцию
Если вам нужны сложные сопоставления, например, учет регистра — этот метод подойдет вам лучше всего. Но у него есть и недостатки: сложность и скорость работы. То есть, в простеньких задачах его лучше не использовать.
Подписывайтесь на канал 👉@pythonofff
Регулярные выражения — более гибкий способ нахождения подстрок в строках. В Python есть встроенный модуль, позволяющий работать с регулярными выражениями, — re. Модуль re содержит функцию
search
, которая позволит вам найти подстрокуЕсли вам нужны сложные сопоставления, например, учет регистра — этот метод подойдет вам лучше всего. Но у него есть и недостатки: сложность и скорость работы. То есть, в простеньких задачах его лучше не использовать.
Подписывайтесь на канал 👉@pythonofff
Возврат нескольких значений из функции
Python позволяет вам возвращать из функции несколько значений.
Для этого необходимо вернуть структуру данных, содержащую эти несколько значений. Например, список количества миль, которые надо пробежать за неделю.
Структура данных — контейнер, хранящий однотипные данные. Эти данные могут быть возвращены из функций. В этой статье мы узнаем, как возвращать несколько значений из структур вроде кортежа, списка и словаря.
Подписывайтесь на канал 👉@pythonofff
Python позволяет вам возвращать из функции несколько значений.
Для этого необходимо вернуть структуру данных, содержащую эти несколько значений. Например, список количества миль, которые надо пробежать за неделю.
Структура данных — контейнер, хранящий однотипные данные. Эти данные могут быть возвращены из функций. В этой статье мы узнаем, как возвращать несколько значений из структур вроде кортежа, списка и словаря.
Подписывайтесь на канал 👉@pythonofff
Поверхностное копирование
Поверхностное копирование создает отдельный новый объект или список, но вместо копирования дочерних элементов в новый объект, оно просто копирует ссылки на их адреса памяти. Следовательно, если вы сделаете изменение в исходном объекте, оно будет отражено в скопированном объекте, и наоборот.
Подписывайтесь на канал 👉@pythonofff
Поверхностное копирование создает отдельный новый объект или список, но вместо копирования дочерних элементов в новый объект, оно просто копирует ссылки на их адреса памяти. Следовательно, если вы сделаете изменение в исходном объекте, оно будет отражено в скопированном объекте, и наоборот.
Подписывайтесь на канал 👉@pythonofff
Глубокое (полное) копирование
Глубокая копия создает новую и отдельную копию всего объекта или списка со своим уникальным адресом памяти. Это означает, что любые изменения, внесенные вами в новую копию объекта или списка, не будут отражаться в исходной. Этот процесс происходит следующим образом: сначала создается новый список или объект, а затем рекурсивно копируются все элементы из исходного в новый.
Короче говоря, оба объекта становятся полностью независимы друг от друга. Это похоже на концепцию передачи по значению в таких языках, как C ++, Java и C #.
Подписывайтесь на канал 👉@pythonofff
Глубокая копия создает новую и отдельную копию всего объекта или списка со своим уникальным адресом памяти. Это означает, что любые изменения, внесенные вами в новую копию объекта или списка, не будут отражаться в исходной. Этот процесс происходит следующим образом: сначала создается новый список или объект, а затем рекурсивно копируются все элементы из исходного в новый.
Короче говоря, оба объекта становятся полностью независимы друг от друга. Это похоже на концепцию передачи по значению в таких языках, как C ++, Java и C #.
Подписывайтесь на канал 👉@pythonofff
Кастомная функциональность
Этот декоратор — это всего лишь пример того, как вы можете проверить некоторые разрешения совсем просто и на 100% настроить это так, как вам необходимо.
Представьте, что у вас есть блог, магазин, форум… Если у пользователей должно быть несколько очков активности, чтобы написать отзыв, это стало бы хорошим способом избежать спама. Мы создадим декоратор, чтобы проверить, что пользователь вошел в систему и имеет более 10 баллов, поэтому может написать отзыв, в противном случае мы не дадим ему сделать этого.
Подписывайтесь на канал 👉@pythonofff
Этот декоратор — это всего лишь пример того, как вы можете проверить некоторые разрешения совсем просто и на 100% настроить это так, как вам необходимо.
Представьте, что у вас есть блог, магазин, форум… Если у пользователей должно быть несколько очков активности, чтобы написать отзыв, это стало бы хорошим способом избежать спама. Мы создадим декоратор, чтобы проверить, что пользователь вошел в систему и имеет более 10 баллов, поэтому может написать отзыв, в противном случае мы не дадим ему сделать этого.
Подписывайтесь на канал 👉@pythonofff