Python Nation🐍🇺🇦
2.84K subscribers
237 photos
2 files
158 links
Канал для всіх, хто вивчає Python: поради, приклади коду, бібліотеки, лайфхаки та актуальні новин👨‍💻🐍

По всім питанням👉 @giorg_jr

❗️Канал регулярно очищується від неактивних підписників❗️
Download Telegram
The Single Responsibility Principle

Принцип единой ответственности, то есть один класс решает одну задачу и у класса должна быть только одна причина для изменения. Если класс задает направление движения машины, то этот класс не должен выполнять какие-либо другие задачи. Таким образом, данный принцип помогает разбивать общую конструкцию на независимые модули и уменьшать межмодульную связью.

#solid @pythonnation
Python — отличный скриптовый язык. Но иногда стандартные библиотеки os и subprocess вызывают только головную боль.

Библиотека sh может стать приятной альтернативой.

Она позволяет вызывать любую программу как обычную функцию, что полезно для автоматизации различных задач исключительно с помощью Python.

Библиотека sh поддерживает только платформы Linux и macOS. Для работы на Windows нужно поискать другой инструмент.

#sh @pythonnation
The Open Closed Principle

Принцип открытости/закрытости. Если понадобилось добавить новую функциональность к классу, то существующий класс не модифицируем, а создаем наследника класса с новыми возможностями. То есть у нас должна быть возможность расширять класс без изменения самого класса.

#solid @pythonnation
The Liskov Substitution Principle

Принцип подстановки Лисков, описывающий возможности заменяемости экземпляров объектов. Простыми словами: дочерний класс должен следовать принципам родительского класса и не изменять их. Пусть у нас есть класс Прямоугольник с методами, задающими ширину, высоту и рассчитывающим площадь. Теперь мы захотели создать класс Квадрат. Квадрат – тот же самый прямоугольник, но с одинаковыми сторонами. Класс Квадрат наследуется от класса Прямоугольник и переопределяет его методы: подставляем значения – все работает. Но если мы начнем использовать класс Прямоугольник в качестве интерфейса, а работать будем с классом Квадрат, мы разом изменяем оба параметра. Чтобы решить эту проблему, создается общий интерфейс для обоих классов и вместо наследования одного класса от другого использовать этот самый интерфейс.

#solid @pythonnation
Модуль dis

Вы когда-нибудь задумывались, что Python делает под капотом? Со стандартным модулем библиотеки dis вы можете легко посмотреть. Эта библиотека позволяет декомпилировать байт-код Python и изучить его.

#dis @pythonnation
The Interface Segregation Principle

Принцип разделения интерфейсов. Создавайте узкоспециализированные интерфейсы и не вынуждайте клиента зависеть от неиспользуемых интерфейсов. Допустим есть класс Auto с методами комплектаций для всех автомобилей. Если мы наследуемся от интерфейса, то все методы реализованные в нем должны быть описаны в классе-потомке. В результате чего классы могут получить ненужные методы. Для решения этой проблемы мы разделяем интерфейсы.

#solid @pythonnation
Функция help

Если вы находитесь в Python Shell или делаете отладку кода с использованием breakpoint, и хотите знать, как работает определённый объект, метод или атрибут, функция help поможет вам.

В действительности вы, скорее всего, будете обращаться за помощью к поисковой системе. Но если вы уже находитесь в Python Shell, вызов help(list.append) будет быстрее, чем поиск документации в Google.

#help @pythonnation
The Dependency Inversion Principle

Принцип инверсии зависимостей - зависимость должна быть от абстракций, а не от конкретики. Модули верхних уровней не должны зависеть от модулей нижних уровней. Классы и верхних, и нижних уровней должны зависеть от одних и тех же абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Наступает момент в разработке, когда наше приложение в основном состоит из модулей. Когда такое происходит, нам необходимо улучшать код используя внедрение зависимостей. Функционирование компонентов высокого уровня зависит от компонентов низкого уровня. Для создания определенного поведения вы можете использовать наследование или интерфейсы.

#solid @pythonnation
Игры, в которых использовался Python

Разработок много, но не все из них можно назвать успешными, однако есть проекты, заслуживающие внимания. Вот некоторые из самых известны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
Функция abs() возвращает абсолютное значение заданного числа. Если это комплексное число, функция abs() возвращает его величину.

#встроенные_функции @pythonnation
Декоратор cached_property

Как можно догадаться из названия, он используется для кэширования результатов атрибутов класса. Механика очень полезная, если у вас есть свойство, которое дорого вычислять, но оно при этом остается неизменным.

Этот простой пример показывает как можно использовать cached_property для кэширования отрисованной HTML - страницы, которая должна снова и снова показываться пользователю.

cached_property запускается только при поиске, поэтому позволяет нам менять значение атрибута. После изменения атрибута закэшированное ранее значение меняться не будет, вместо этого будет вычислено и закэшировано новое значение. А еще кэш можно очистить, и все, что нужно для этого сделать – это удалить атрибут.

Не используйте декоратор, если у вашей функции есть какие-то побочные эффекты или если она при каждом вызове создает изменяемые объекты, поскольку это явно не те функции, которые вы захотите кэшировать.

#cached_property @pythonnation
Оператор равенства == сравнивает значения обоих операндов и проверяет их равенство.

В то время как оператор is проверяет, относятся ли оба операнда к одной и той же ячейке в памяти.

Python в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны такие казусы(короткая строка)

Но стоит сделать строку длиннее и всё встаёт на свои места(длинная строка)

@pythonnation
⚡️ Задача с собеседования | Уровень: #Easy

Условие:

Ваша задача — написать функцию, которая проверяет, является ли число простым.
Простые числа — числа, которые делятся нацело только на единицу и на само себя.

Пример:

is_prime_number(2) -> True
is_prime_number(9) -> False
is_prime_number(117) -> False
is_prime_number(127) -> True

📌Делитесь своим решением в комментариях👇

#задача_с_собеседования @pythonnation
⚡️ Задача с собеседования | Уровень: #Medium

Условие:

Нужно написать код, который будет переводить римские символы в привычную нам десятичную систему.

Пример:

roman_to_int('XXI') -> 21
roman_to_int('IV') -> 4
roman_to_int('I') -> 1

📌Делитесь своим решением в комментариях👇

#задача_с_собеседования @pythonnation
Эта функция принимает объект и возвращает итерируемый объект. Сам по себе он бесполезен, но оказывается крайне эффективным при использовании в циклах for и while. Благодаря этому объект можно перебирать по одному свойству за раз.

#встроенные_функции #iter @pythonnation
eval() обрабатывает переданное в нее выражение и исполняет его как выражение Python. После этого возвращается значение. Чаще всего эта функция используется для выполнения математических функций.

#встроенные_функции #eval @pythonnation
Функция chr() возвращает строку, представляющую символ Unicode для переданного числа. Она является противоположностью ord(), которая принимает символ и возвращает его числовой код.

#встроенные_функции #chr @pythonnation
В качестве параметра enumerate() принимает последовательность. После этого она перебирает каждый элемент и возвращает его вместе со счетчиком в виде перечисляемого объекта. Основная особенность таких объектов — возможность размещать их в цикле для перебора.

#встроенные_функции #enumerate @pythonnation