Коротко о том, что такое метаклассы
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
На скрине, самая простая реализация метакласса, которая ничего не делает.
Подписывайтесь на канал 👉@pythonofff
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
На скрине, самая простая реализация метакласса, которая ничего не делает.
Подписывайтесь на канал 👉@pythonofff
👍3
Нелокальная переменная во вложенной функции
Прежде чем перейти к тому, что такое замыкание, мы должны сначала понять, что такое вложенная функция и нелокальная (
Функция, определенная внутри другой функции, называется вложенной функцией. Вложенные функции могут получать доступ к переменным из локальной области видимости объемлющих функций (
В Python нелокальные переменные по умолчанию доступны только для чтения. Если нам необходимо их модифицировать, то мы должны объявить их явно как нелокальные (используя ключевое слово nonlocal).
Подписывайтесь на канал 👉@pythonofff
Прежде чем перейти к тому, что такое замыкание, мы должны сначала понять, что такое вложенная функция и нелокальная (
nonlocal
) переменная.Функция, определенная внутри другой функции, называется вложенной функцией. Вложенные функции могут получать доступ к переменным из локальной области видимости объемлющих функций (
enclosing scope
).В Python нелокальные переменные по умолчанию доступны только для чтения. Если нам необходимо их модифицировать, то мы должны объявить их явно как нелокальные (используя ключевое слово nonlocal).
Подписывайтесь на канал 👉@pythonofff
👍5
Что делают OrderedDict и fromkeys()?
Параметры:
seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
value: Опционально; если задать, значение будет установлено в качестве value.
Подписывайтесь на канал 👉@pythonofff
OrderedDict
это словарь, который запоминает порядок вставки ключей. Если новое вхождение перезаписывает существующее вхождение, исходная позиция вставки остается неизменной.fromkeys()
создает новый словарь и возвращает список ключей. Ключи для нового словаря берутся из seq, а значения — из value (если заданы). Синтаксис метода fromkeys()
— fromkeys(seq[, value])
.Параметры:
seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
value: Опционально; если задать, значение будет установлено в качестве value.
Подписывайтесь на канал 👉@pythonofff
👍1
Используем lambda, sum() и map()
Лямбда-функция в Python — это просто функция Python. Но это некий особенный тип с ограниченными возможностями.
Лямбда-функции вместе с
Подписывайтесь на канал 👉@pythonofff
Лямбда-функция в Python — это просто функция Python. Но это некий особенный тип с ограниченными возможностями.
Лямбда-функции вместе с
sum()
и map()
также могут решить конкретно эту задачу подсчета общего числа вхождений определенного элемента в строку. Этот метод использует sum()
для суммирования всех вхождений, полученных с помощью map()
.Подписывайтесь на канал 👉@pythonofff
👍1
Используем collection.Counter ()
Это менее известный метод для получения количества вхождений элемента в любой контейнер в Python. Он также выполняет задачу, аналогичную описанным выше двум методам, просто является функцией другой библиотеки, т.е. collections.
Класс
Счетчик может быть любым целочисленным значением, включая ноль или отрицательное число. Класс
Подписывайтесь на канал 👉@pythonofff
Это менее известный метод для получения количества вхождений элемента в любой контейнер в Python. Он также выполняет задачу, аналогичную описанным выше двум методам, просто является функцией другой библиотеки, т.е. collections.
Класс
Counter()
модуля collections - это подкласс словаря dict для подсчета хеш-объектов (неизменяемых, таких как строки, числа, кортежи и т.д.). Это коллекция, в которой элементы хранятся в виде словарных ключей, а их счетчики хранятся в виде значений словаря.Счетчик может быть любым целочисленным значением, включая ноль или отрицательное число. Класс
collections.Counter()
похож на мультимножества в других языках программирования.Подписывайтесь на канал 👉@pythonofff
👍3
Регулярные выражения (REGEX)
Регулярные выражения — более гибкий способ нахождения подстрок в строках. В Python есть встроенный модуль, позволяющий работать с регулярными выражениями, — re. Модуль re содержит функцию
Если вам нужны сложные сопоставления, например, учет регистра — этот метод подойдет вам лучше всего. Но у него есть и недостатки: сложность и скорость работы. То есть, в простеньких задачах его лучше не использовать.
Подписывайтесь на канал 👉@pythonofff
Регулярные выражения — более гибкий способ нахождения подстрок в строках. В Python есть встроенный модуль, позволяющий работать с регулярными выражениями, — re. Модуль re содержит функцию
search
, которая позволит вам найти подстрокуЕсли вам нужны сложные сопоставления, например, учет регистра — этот метод подойдет вам лучше всего. Но у него есть и недостатки: сложность и скорость работы. То есть, в простеньких задачах его лучше не использовать.
Подписывайтесь на канал 👉@pythonofff
👍5
Возврат нескольких значений из функции
Python позволяет вам возвращать из функции несколько значений.
Для этого необходимо вернуть структуру данных, содержащую эти несколько значений. Например, список количества миль, которые надо пробежать за неделю.
Структура данных — контейнер, хранящий однотипные данные. Эти данные могут быть возвращены из функций. В этой статье мы узнаем, как возвращать несколько значений из структур вроде кортежа, списка и словаря.
Подписывайтесь на канал 👉@pythonofff
Python позволяет вам возвращать из функции несколько значений.
Для этого необходимо вернуть структуру данных, содержащую эти несколько значений. Например, список количества миль, которые надо пробежать за неделю.
Структура данных — контейнер, хранящий однотипные данные. Эти данные могут быть возвращены из функций. В этой статье мы узнаем, как возвращать несколько значений из структур вроде кортежа, списка и словаря.
Подписывайтесь на канал 👉@pythonofff
👏2
Поверхностное копирование
Поверхностное копирование создает отдельный новый объект или список, но вместо копирования дочерних элементов в новый объект, оно просто копирует ссылки на их адреса памяти. Следовательно, если вы сделаете изменение в исходном объекте, оно будет отражено в скопированном объекте, и наоборот.
Подписывайтесь на канал 👉@pythonofff
Поверхностное копирование создает отдельный новый объект или список, но вместо копирования дочерних элементов в новый объект, оно просто копирует ссылки на их адреса памяти. Следовательно, если вы сделаете изменение в исходном объекте, оно будет отражено в скопированном объекте, и наоборот.
Подписывайтесь на канал 👉@pythonofff
👍4
Глубокое (полное) копирование
Глубокая копия создает новую и отдельную копию всего объекта или списка со своим уникальным адресом памяти. Это означает, что любые изменения, внесенные вами в новую копию объекта или списка, не будут отражаться в исходной. Этот процесс происходит следующим образом: сначала создается новый список или объект, а затем рекурсивно копируются все элементы из исходного в новый.
Короче говоря, оба объекта становятся полностью независимы друг от друга. Это похоже на концепцию передачи по значению в таких языках, как C ++, Java и C #.
Подписывайтесь на канал 👉@pythonofff
Глубокая копия создает новую и отдельную копию всего объекта или списка со своим уникальным адресом памяти. Это означает, что любые изменения, внесенные вами в новую копию объекта или списка, не будут отражаться в исходной. Этот процесс происходит следующим образом: сначала создается новый список или объект, а затем рекурсивно копируются все элементы из исходного в новый.
Короче говоря, оба объекта становятся полностью независимы друг от друга. Это похоже на концепцию передачи по значению в таких языках, как C ++, Java и C #.
Подписывайтесь на канал 👉@pythonofff
👍5
Кастомная функциональность
Этот декоратор — это всего лишь пример того, как вы можете проверить некоторые разрешения совсем просто и на 100% настроить это так, как вам необходимо.
Представьте, что у вас есть блог, магазин, форум… Если у пользователей должно быть несколько очков активности, чтобы написать отзыв, это стало бы хорошим способом избежать спама. Мы создадим декоратор, чтобы проверить, что пользователь вошел в систему и имеет более 10 баллов, поэтому может написать отзыв, в противном случае мы не дадим ему сделать этого.
Подписывайтесь на канал 👉@pythonofff
Этот декоратор — это всего лишь пример того, как вы можете проверить некоторые разрешения совсем просто и на 100% настроить это так, как вам необходимо.
Представьте, что у вас есть блог, магазин, форум… Если у пользователей должно быть несколько очков активности, чтобы написать отзыв, это стало бы хорошим способом избежать спама. Мы создадим декоратор, чтобы проверить, что пользователь вошел в систему и имеет более 10 баллов, поэтому может написать отзыв, в противном случае мы не дадим ему сделать этого.
Подписывайтесь на канал 👉@pythonofff
👍4
re.split()
Данный метод разделяет строку по заданному шаблону. Если шаблон найден, оставшиеся символы из строки возвращаются в виде результирующего списка. Более того, мы можем указать максимальное количество разделений для нашей строки.
Синтаксис:
Возвращаемое значение может быть либо списком строк, на которые была разделена исходная строка, либо пустым списком, если совпадений с шаблоном не нашлось.
Подписывайтесь на канал 👉@pythonofff
Данный метод разделяет строку по заданному шаблону. Если шаблон найден, оставшиеся символы из строки возвращаются в виде результирующего списка. Более того, мы можем указать максимальное количество разделений для нашей строки.
Синтаксис:
re.split
(шаблон, строка, maxsplit = 0
)Возвращаемое значение может быть либо списком строк, на которые была разделена исходная строка, либо пустым списком, если совпадений с шаблоном не нашлось.
Подписывайтесь на канал 👉@pythonofff
👍4
Когда стоит использовать замыкания?
Так для чего же нужны замыкания?
Замыкания позволяют избежать использования глобальных (global) значений и обеспечивают некоторую форму сокрытия данных. Для этого также может использоваться объектно-ориентированный подход.
Если в классе необходимо реализовать небольшое количество методов (в большинстве случаев один метод), замыкания могут обеспечить альтернативное и более элегантное решение.
Иногда количество атрибутов и методов становится больше, лучше реализовать класс.
Вот простой пример, где замыкание может быть более предпочтительным, чем определение класса и создание объектов. Но выбор остается за вами.
Подписывайтесь на канал 👉@pythonofff
Так для чего же нужны замыкания?
Замыкания позволяют избежать использования глобальных (global) значений и обеспечивают некоторую форму сокрытия данных. Для этого также может использоваться объектно-ориентированный подход.
Если в классе необходимо реализовать небольшое количество методов (в большинстве случаев один метод), замыкания могут обеспечить альтернативное и более элегантное решение.
Иногда количество атрибутов и методов становится больше, лучше реализовать класс.
Вот простой пример, где замыкание может быть более предпочтительным, чем определение класса и создание объектов. Но выбор остается за вами.
Подписывайтесь на канал 👉@pythonofff
👍3
Элегантный способ перевернуть строку в Python - Цикл
Мы можем перевернуть строку и в цикле.
Для начала создадим массив (список)
После этого мы можем запустить цикл, где итерируемой переменной будет index — длина списка.
На каждой итерации цикла в
Цикл продолжается до тех пор, пока переменная index не станет равна 0.
Подписывайтесь на канал 👉@pythonofff
Мы можем перевернуть строку и в цикле.
Для начала создадим массив (список)
reversedString[]
.После этого мы можем запустить цикл, где итерируемой переменной будет index — длина списка.
На каждой итерации цикла в
reversedString
добавляется символ из строки с индексом [index-1]. После этого index уменьшается на 1. Цикл продолжается до тех пор, пока переменная index не станет равна 0.
Подписывайтесь на канал 👉@pythonofff
😱5👍3👎2🤔1
Облегчите перебор нескольких списков с помощью zip()
С помощью встроенной функции
Обратите внимание: функция zip() возвращает zip-объект, но с помощью приведения типов вы можете преобразовать его — например, с помощью
Подписывайтесь на канал 👉@pythonofff
С помощью встроенной функции
zip()
мы можем все немного упростить.Обратите внимание: функция zip() возвращает zip-объект, но с помощью приведения типов вы можете преобразовать его — например, с помощью
list()
, tuple()
или dict()
.Подписывайтесь на канал 👉@pythonofff
👍8🔥1
Как отформатировать строку с помощью f-строк
F-строки (сокращение от format string) – это новейший метод из поддерживаемых Python 3, поэтому он быстро набирает популярность.
f-строки похожи на метод
Последовательный порядок из метода конкатенации
Модульность метода
Благодаря этим достоинствам все больше и больше разработчиков используют именно этот метод. Кроме того, этот подход легко освоить. Так что, если вы еще новичок в программировании, то f-строки однозначно для вас.
Подписывайтесь на канал 👉@pythonofff
F-строки (сокращение от format string) – это новейший метод из поддерживаемых Python 3, поэтому он быстро набирает популярность.
f-строки похожи на метод
.format()
. Однако они предоставляют более ёмкий способ сделать то же самое, всего лишь добавив к строке букву f в качестве префикса. Последовательный порядок из метода конкатенации
Модульность метода
.format()
Благодаря этим достоинствам все больше и больше разработчиков используют именно этот метод. Кроме того, этот подход легко освоить. Так что, если вы еще новичок в программировании, то f-строки однозначно для вас.
Подписывайтесь на канал 👉@pythonofff
👍4
Школа программирования Хекслет объявляет набор на подготовительный курс по Python.
Даём только мясную и прикладную информацию. Никакой воды и траты твоего времени. По окончании 14-дневного курса ты уже владеешь базовым знанием языка и даже напишешь собственную программу!
Прямо сейчас переходите по ссылке ниже и бронируйте место, мы стартуем 1 июня!
Даём только мясную и прикладную информацию. Никакой воды и траты твоего времени. По окончании 14-дневного курса ты уже владеешь базовым знанием языка и даже напишешь собственную программу!
Прямо сейчас переходите по ссылке ниже и бронируйте место, мы стартуем 1 июня!
👎4🥰1
re.compile()
С помощью этого метода регулярные выражения компилируются в объекты шаблона и могут использоваться в других методах. Рассмотрим это на примере поиска совпадений с шаблоном.
Подписывайтесь на канал 👉@pythonofff
С помощью этого метода регулярные выражения компилируются в объекты шаблона и могут использоваться в других методах. Рассмотрим это на примере поиска совпадений с шаблоном.
Подписывайтесь на канал 👉@pythonofff
👍4
Преобразуем список в словарь при помощи генератора словаря
Для преобразования списка Python в словарь также можно использовать генератор словаря.
Генератор словаря похож на генератор списка в том, что оба они создают новое значение соответствующего типа данных.
Что касается синтаксиса, в генераторе словаря используются фигурные скобки {}, а в генераторе списка — квадратные [ ].
Для начала мы объявили список фруктов (fruits), где хранятся их названия, которые мы хотим перенести в словарь.
Затем мы использовали генератор словаря, чтобы пройтись по каждому элементу в списке fruits. Для каждого фрукта в нашем списке мы добавили элемент в новый словарь. При этом каждому фрукту мы присвоили значение In stock.
Подписывайтесь на канал 👉@pythonofff
Для преобразования списка Python в словарь также можно использовать генератор словаря.
Генератор словаря похож на генератор списка в том, что оба они создают новое значение соответствующего типа данных.
Что касается синтаксиса, в генераторе словаря используются фигурные скобки {}, а в генераторе списка — квадратные [ ].
Для начала мы объявили список фруктов (fruits), где хранятся их названия, которые мы хотим перенести в словарь.
Затем мы использовали генератор словаря, чтобы пройтись по каждому элементу в списке fruits. Для каждого фрукта в нашем списке мы добавили элемент в новый словарь. При этом каждому фрукту мы присвоили значение In stock.
Подписывайтесь на канал 👉@pythonofff
👍2
ASCII-текст
По умолчанию json.dump проверяет, имеет ли ваш текст в словаре кодировку ASCII. Если присутствуют символы, отличные от ASCII, они автоматически экранируются.
Но это не всегда приемлемо. Во многих случаях вы бы хотели сохранить символы Unicode нетронутыми.
Подписывайтесь на канал 👉@pythonofff
По умолчанию json.dump проверяет, имеет ли ваш текст в словаре кодировку ASCII. Если присутствуют символы, отличные от ASCII, они автоматически экранируются.
Но это не всегда приемлемо. Во многих случаях вы бы хотели сохранить символы Unicode нетронутыми.
Подписывайтесь на канал 👉@pythonofff
👍3