⚡️ Задача с собеседования | Уровень: #Easy
Условие:
Создать функцию которая принимает число и возвращает "Even" для чётных чисел и "Odd" для нечётных.
Пример:
#задача_с_собеседования @pythonnation
Условие:
Создать функцию которая принимает число и возвращает "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:
Интересное расширение 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
Условие:
Создать функцию которая принимает строку и заменяет каждую букву на её позицию в алфавите. Если что-то в тексте не является буквой, игнорируйте это и не возвращайте. На выходе получаем строку.
Пример:
Ф-ция принимает:
#задача_с_собеседования @pythonnation
Условие:
Создать функцию которая принимает строку и заменяет каждую букву на её позицию в алфавите. Если что-то в тексте не является буквой, игнорируйте это и не возвращайте. На выходе получаем строку.
Пример:
Ф-ция принимает:
"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 относительно медленный язык (по сравнению с C, Go, Java). Его скорость выполнения схожа с другими интерпретируемыми языками (PHP, Ruby). Однако возможность компиляции python-кода в байт-код позволяет добиться большей производительности.
Основные причины, из-за которых Python "медленный":
— GIL (глобальная блокировка интерпретатора).
— Динамическая типизация.
— Python это интерпретируемый, а не компилируемый язык.
Несмотря на это, в большинстве задач гораздо важнее быстро получить результат, нежели ускорить выполнение программы. Особенно это важно для бизнеса или стартапа, где критически важно быстро выпустить продукт в production и начать зарабатывать.
Как преобразовать напечатанный текст в рукописный текст с помощью Python?
Ответ простой! Используйте библиотеку
Результат сохраняется на одном уровне с исполняемым скриптом в виде PNG изображения.
К сожалению с кириллицей не работает.
Перед запуском кода установите пакет
Ответ простой! Используйте библиотеку
pywhatkit
для этой задачи.Результат сохраняется на одном уровне с исполняемым скриптом в виде PNG изображения.
К сожалению с кириллицей не работает.
Перед запуском кода установите пакет
pywhatkit
:pip install pywhatkit
SOLID
SOLID это пять принципов объектно-ориентированного программирования, которые задают архитектуру программы.
При правильной реализации это делает ваш код более расширяемым, логичным и легким для чтения.
В следующих постах я попытаюсь объяснить принципы SOLID на примере Python в как можно более простой форме, чтобы все смогли разобраться. Чтобы было очень легко взять представленные примеры и применить их на Python.
#solid @pythonnation
SOLID это пять принципов объектно-ориентированного программирования, которые задают архитектуру программы.
При правильной реализации это делает ваш код более расширяемым, логичным и легким для чтения.
В следующих постах я попытаюсь объяснить принципы SOLID на примере Python в как можно более простой форме, чтобы все смогли разобраться. Чтобы было очень легко взять представленные примеры и применить их на Python.
#solid @pythonnation
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