The Single Responsibility Principle
Принцип единой ответственности, то есть один класс решает одну задачу и у класса должна быть только одна причина для изменения. Если класс задает направление движения машины, то этот класс не должен выполнять какие-либо другие задачи. Таким образом, данный принцип помогает разбивать общую конструкцию на независимые модули и уменьшать межмодульную связью.
#solid @pythonnation
Принцип единой ответственности, то есть один класс решает одну задачу и у класса должна быть только одна причина для изменения. Если класс задает направление движения машины, то этот класс не должен выполнять какие-либо другие задачи. Таким образом, данный принцип помогает разбивать общую конструкцию на независимые модули и уменьшать межмодульную связью.
#solid @pythonnation
Python — отличный скриптовый язык. Но иногда стандартные библиотеки
Библиотека
Она позволяет вызывать любую программу как обычную функцию, что полезно для автоматизации различных задач исключительно с помощью Python.
Библиотека
#sh @pythonnation
os
и subprocess
вызывают только головную боль.Библиотека
sh
может стать приятной альтернативой.Она позволяет вызывать любую программу как обычную функцию, что полезно для автоматизации различных задач исключительно с помощью Python.
Библиотека
sh
поддерживает только платформы Linux и macOS. Для работы на Windows нужно поискать другой инструмент.#sh @pythonnation
The Open Closed Principle
Принцип открытости/закрытости. Если понадобилось добавить новую функциональность к классу, то существующий класс не модифицируем, а создаем наследника класса с новыми возможностями. То есть у нас должна быть возможность расширять класс без изменения самого класса.
#solid @pythonnation
Принцип открытости/закрытости. Если понадобилось добавить новую функциональность к классу, то существующий класс не модифицируем, а создаем наследника класса с новыми возможностями. То есть у нас должна быть возможность расширять класс без изменения самого класса.
#solid @pythonnation
The Liskov Substitution Principle
Принцип подстановки Лисков, описывающий возможности заменяемости экземпляров объектов. Простыми словами: дочерний класс должен следовать принципам родительского класса и не изменять их. Пусть у нас есть класс
#solid @pythonnation
Принцип подстановки Лисков, описывающий возможности заменяемости экземпляров объектов. Простыми словами: дочерний класс должен следовать принципам родительского класса и не изменять их. Пусть у нас есть класс
Прямоугольник
с методами, задающими ширину, высоту и рассчитывающим площадь. Теперь мы захотели создать класс Квадрат
. Квадрат – тот же самый прямоугольник, но с одинаковыми сторонами. Класс Квадрат
наследуется от класса Прямоугольник
и переопределяет его методы: подставляем значения – все работает. Но если мы начнем использовать класс Прямоугольник
в качестве интерфейса, а работать будем с классом Квадрат
, мы разом изменяем оба параметра. Чтобы решить эту проблему, создается общий интерфейс для обоих классов и вместо наследования одного класса от другого использовать этот самый интерфейс.#solid @pythonnation
Модуль dis
Вы когда-нибудь задумывались, что Python делает под капотом? Со стандартным модулем библиотеки
#dis @pythonnation
Вы когда-нибудь задумывались, что Python делает под капотом? Со стандартным модулем библиотеки
dis
вы можете легко посмотреть. Эта библиотека позволяет декомпилировать байт-код Python и изучить его.#dis @pythonnation
The Interface Segregation Principle
Принцип разделения интерфейсов. Создавайте узкоспециализированные интерфейсы и не вынуждайте клиента зависеть от неиспользуемых интерфейсов. Допустим есть класс Auto с методами комплектаций для всех автомобилей. Если мы наследуемся от интерфейса, то все методы реализованные в нем должны быть описаны в классе-потомке. В результате чего классы могут получить ненужные методы. Для решения этой проблемы мы разделяем интерфейсы.
#solid @pythonnation
Принцип разделения интерфейсов. Создавайте узкоспециализированные интерфейсы и не вынуждайте клиента зависеть от неиспользуемых интерфейсов. Допустим есть класс Auto с методами комплектаций для всех автомобилей. Если мы наследуемся от интерфейса, то все методы реализованные в нем должны быть описаны в классе-потомке. В результате чего классы могут получить ненужные методы. Для решения этой проблемы мы разделяем интерфейсы.
#solid @pythonnation
Функция help
Если вы находитесь в
В действительности вы, скорее всего, будете обращаться за помощью к поисковой системе. Но если вы уже находитесь в
#help @pythonnation
Если вы находитесь в
Python Shell
или делаете отладку кода с использованием breakpoint
, и хотите знать, как работает определённый объект, метод или атрибут, функция help
поможет вам.В действительности вы, скорее всего, будете обращаться за помощью к поисковой системе. Но если вы уже находитесь в
Python Shell
, вызов help(list.append)
будет быстрее, чем поиск документации в Google.#help @pythonnation
The Dependency Inversion Principle
Принцип инверсии зависимостей - зависимость должна быть от абстракций, а не от конкретики. Модули верхних уровней не должны зависеть от модулей нижних уровней. Классы и верхних, и нижних уровней должны зависеть от одних и тех же абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Наступает момент в разработке, когда наше приложение в основном состоит из модулей. Когда такое происходит, нам необходимо улучшать код используя внедрение зависимостей. Функционирование компонентов высокого уровня зависит от компонентов низкого уровня. Для создания определенного поведения вы можете использовать наследование или интерфейсы.
#solid @pythonnation
Принцип инверсии зависимостей - зависимость должна быть от абстракций, а не от конкретики. Модули верхних уровней не должны зависеть от модулей нижних уровней. Классы и верхних, и нижних уровней должны зависеть от одних и тех же абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Наступает момент в разработке, когда наше приложение в основном состоит из модулей. Когда такое происходит, нам необходимо улучшать код используя внедрение зависимостей. Функционирование компонентов высокого уровня зависит от компонентов низкого уровня. Для создания определенного поведения вы можете использовать наследование или интерфейсы.
#solid @pythonnation
Игры, в которых использовался Python
Разработок много, но не все из них можно назвать успешными, однако есть проекты, заслуживающие внимания. Вот некоторые из самых известныx игр, в которых был в той или иной мере использован Python:
- Battlefield
- EVE Online
- World of Tanks
- The Sims 4
- Mount & Blade
- Civilization IV
- Frets On Fire (FoF)
Разработок много, но не все из них можно назвать успешными, однако есть проекты, заслуживающие внимания. Вот некоторые из самых известныx игр, в которых был в той или иной мере использован Python:
- Battlefield
- EVE Online
- World of Tanks
- The Sims 4
- Mount & Blade
- Civilization IV
- Frets On Fire (FoF)
lru_cache
предоставляет кэш последних результатов выполнения функций, или другими словами, запоминает результат их работы.В этом примере мы делаем GET-запросы и кэшируем их результаты (до 32 результатов) с помощью декоратора
@lru_cache
. Чтобы увидеть, действительно ли кэширование работает, можно проверить информацию о кэше функции, с помощью метода cache_info
, который показывает количество удачных и неудачных обращений в кэш. Декоратор также предоставляет методы clear_cache
и cache_parameters
для аннулирования кэшированных результатов и проверки параметров, соответственно.Если вам нужно более детализированное кэширование, можете включить необязательный аргумент
typed=true
, что позволяет кэшировать аргументы разных типов по отдельности.#lru_cache @pythonnation
Функция
#встроенные_функции @pythonnation
abs()
возвращает абсолютное значение заданного числа. Если это комплексное число, функция abs()
возвращает его величину.#встроенные_функции @pythonnation
Декоратор
Этот простой пример показывает как можно использовать
Не используйте декоратор, если у вашей функции есть какие-то побочные эффекты или если она при каждом вызове создает изменяемые объекты, поскольку это явно не те функции, которые вы захотите кэшировать.
#cached_property @pythonnation
cached_property
Как можно догадаться из названия, он используется для кэширования результатов атрибутов класса. Механика очень полезная, если у вас есть свойство, которое дорого вычислять, но оно при этом остается неизменным.Этот простой пример показывает как можно использовать
cached_property
для кэширования отрисованной HTML
- страницы, которая должна снова и снова показываться пользователю.cached_property
запускается только при поиске, поэтому позволяет нам менять значение атрибута. После изменения атрибута закэшированное ранее значение меняться не будет, вместо этого будет вычислено и закэшировано новое значение. А еще кэш можно очистить, и все, что нужно для этого сделать – это удалить атрибут.Не используйте декоратор, если у вашей функции есть какие-то побочные эффекты или если она при каждом вызове создает изменяемые объекты, поскольку это явно не те функции, которые вы захотите кэшировать.
#cached_property @pythonnation
Оператор равенства
В то время как оператор
Python в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны такие казусы(короткая строка)
Но стоит сделать строку длиннее и всё встаёт на свои места(длинная строка)
@pythonnation
==
сравнивает значения обоих операндов и проверяет их равенство. В то время как оператор
is
проверяет, относятся ли оба операнда к одной и той же ячейке в памяти.Python в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны такие казусы(короткая строка)
Но стоит сделать строку длиннее и всё встаёт на свои места(длинная строка)
@pythonnation
⚡️ Задача с собеседования | Уровень: #Easy
Условие:
Ваша задача — написать функцию, которая проверяет, является ли число простым.
Простые числа — числа, которые делятся нацело только на единицу и на само себя.
Пример:
#задача_с_собеседования @pythonnation
Условие:
Ваша задача — написать функцию, которая проверяет, является ли число простым.
Простые числа — числа, которые делятся нацело только на единицу и на само себя.
Пример:
is_prime_number(2) -> True📌Делитесь своим решением в комментариях👇
is_prime_number(9) -> False
is_prime_number(117) -> False
is_prime_number(127) -> True
#задача_с_собеседования @pythonnation
⚡️ Задача с собеседования | Уровень: #Medium
Условие:
Нужно написать код, который будет переводить римские символы в привычную нам десятичную систему.
Пример:
#задача_с_собеседования @pythonnation
Условие:
Нужно написать код, который будет переводить римские символы в привычную нам десятичную систему.
Пример:
roman_to_int('XXI') -> 21
roman_to_int('IV') -> 4
roman_to_int('I') -> 1
📌Делитесь своим решением в комментариях👇#задача_с_собеседования @pythonnation
Эта функция принимает объект и возвращает итерируемый объект. Сам по себе он бесполезен, но оказывается крайне эффективным при использовании в циклах
#встроенные_функции #iter @pythonnation
for
и while
. Благодаря этому объект можно перебирать по одному свойству за раз.#встроенные_функции #iter @pythonnation
eval()
обрабатывает переданное в нее выражение и исполняет его как выражение Python. После этого возвращается значение. Чаще всего эта функция используется для выполнения математических функций.#встроенные_функции #eval @pythonnation
Функция
#встроенные_функции #chr @pythonnation
chr()
возвращает строку, представляющую символ Unicode
для переданного числа. Она является противоположностью ord()
, которая принимает символ и возвращает его числовой код.#встроенные_функции #chr @pythonnation
В качестве параметра
#встроенные_функции #enumerate @pythonnation
enumerate()
принимает последовательность. После этого она перебирает каждый элемент и возвращает его вместе со счетчиком в виде перечисляемого объекта. Основная особенность таких объектов — возможность размещать их в цикле для перебора.#встроенные_функции #enumerate @pythonnation