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

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

❗️Канал регулярно очищується від неактивних підписників❗️
Download Telegram
⚡️ Задача с собеседования | Уровень: #Easy

Условие:

Создать функцию которая принимает число и возвращает "Even" для чётных чисел и "Odd" для нечётных.

Пример:

2 → "Even"
1 → "Odd"
-46 → "Even"
71 → "Odd"
0 → "Even"
-123 → "Odd"

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

#задача_с_собеседования @pythonnation
Присваивания срезам

Представьте, что у вас есть задача заменить каждое второе строковое значение на непосредственно предшествующее ему.

Присваивания срезам самый простейший и наиболее эффективный способ решения нашей маленькой задачи.

Результат представляет собой исходный список, в котором все строковые значения 'null', 'False', 'undefined', '****', 'corrupted', 'nothing' заменены предшествующими им строковыми значениями с указанием браузера.

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

Интересное расширение Python, обобщающее list comprehension, — выражения-генераторы.
Они работают совершенно аналогично list comprehension, только без создания в памяти собственно списка. Числа создаются по ходу дела, без сохранения их явным образом в списке.

Например, вместо вычисления квадратов первых 20 натуральных чисел с помощью list comprehension:

sum([x*x for x in range(20)])

можно воспользоваться выражением-генератором:

sum(x*x for x in range(20))

Использование данного способа ускоряет выполнение программы.
⚡️ Задача с собеседования | Уровень: #Easy

Условие:

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

Пример:
Ф-ция принимает:
"I learn Python with Python Nation!!!"

Ф-ция возвращает: "9 12 5 1 18 14 16 25 20 8 15 14 23 9 20 8 16 25 20 8 15 14 14 1 20 9 15 14"

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

#задача_с_собеседования @pythonnation
Производительность Python

По производительности Python относительно медленный язык (по сравнению с C, Go, Java). Его скорость выполнения схожа с другими интерпретируемыми языками (PHP, Ruby). Однако возможность компиляции python-кода в байт-код позволяет добиться большей производительности.

Основные причины, из-за которых Python "медленный":

— GIL (глобальная блокировка интерпретатора).
— Динамическая типизация.
— Python это интерпретируемый, а не компилируемый язык.

Несмотря на это, в большинстве задач гораздо важнее быстро получить результат, нежели ускорить выполнение программы. Особенно это важно для бизнеса или стартапа, где критически важно быстро выпустить продукт в production и начать зарабатывать.
Мой код не работает!!! Что делать??

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

Ответ простой! Используйте библиотеку pywhatkit для этой задачи.
Результат сохраняется на одном уровне с исполняемым скриптом в виде PNG изображения.

К сожалению с кириллицей не работает.

Перед запуском кода установите пакет
pywhatkit:
pip install pywhatkit
Друзья, напишите в комментариях👇, что на ваш взгляд должно быть вместо знаков вопросов?
SOLID

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

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

#solid @pythonnation
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