⚡️ Context Manager
Помните про with? Там рассказывалось про его использование с классами, но ничто не мешает использовать его с функциями. Только нужна библиотека contextlib.
Чтобы функция могла работать с with, вы добавляете
Только ещё вам нужно yield, чтобы вернуть объект, с которым будет работать with и при этом только приостановить работу функции. Подробнее.
#миниурок #contextlib
Помните про with? Там рассказывалось про его использование с классами, но ничто не мешает использовать его с функциями. Только нужна библиотека contextlib.
Чтобы функция могла работать с with, вы добавляете
@contextmanager
или @asynccontextmanager
, в зависимости от того, нужно ли вам асинхронное выполнение.Только ещё вам нужно yield, чтобы вернуть объект, с которым будет работать with и при этом только приостановить работу функции. Подробнее.
#миниурок #contextlib
Multithreading vs Multiprocessing
Multithreading предполагает, что процессор может выполнять несколько потоков одновременно, где каждый поток запускает процесс. Хорошо справляется с IO нагрузкой.
Multiprocessing предполагает, что есть несколько процессоров, где каждый процессор может запускать один или несколько потоков. Хорошо справляется с большой нагрузкой на CPU.
#миниурок #multithreading #multiprocessing
Multithreading предполагает, что процессор может выполнять несколько потоков одновременно, где каждый поток запускает процесс. Хорошо справляется с IO нагрузкой.
Multiprocessing предполагает, что есть несколько процессоров, где каждый процессор может запускать один или несколько потоков. Хорошо справляется с большой нагрузкой на CPU.
#миниурок #multithreading #multiprocessing
⚡️ Дескрипторы
Они используются для изменения поведения атрибутов. То есть модификация получения, изменения, и удаления свойств класса.
Их основное отличие это методы
На самом деле, тема довольно сложная, но в документации есть отличное HowTo, которое описывает все особенности дескрипторов и их возможное применение.
#теория
Они используются для изменения поведения атрибутов. То есть модификация получения, изменения, и удаления свойств класса.
Их основное отличие это методы
__get__(obj, objtype)
, __set__(obj, value)
, __delete__(obj)
, которые используются для получения, изменения и удаления атрибута.На самом деле, тема довольно сложная, но в документации есть отличное HowTo, которое описывает все особенности дескрипторов и их возможное применение.
#теория
⚡️ Задачка с собеседования | #Medium
Условие:
Вам нужно найти все числа внутри строки. Даже те, что находятся внутри слов.
Пример:
find_numbers('hello 42 I`m a 32') ➞ ['42', '32']
find_numbers('bla42bla') ➞ ['42']
find_numbers('33.33, 1234 1') ➞ ['33', '33', '1234', '1']
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
Условие:
Вам нужно найти все числа внутри строки. Даже те, что находятся внутри слов.
Пример:
find_numbers('hello 42 I`m a 32') ➞ ['42', '32']
find_numbers('bla42bla') ➞ ['42']
find_numbers('33.33, 1234 1') ➞ ['33', '33', '1234', '1']
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
⚡️
#теория
@staticmethod
и @classmethod
Декораторы говорят о том, как будут другие объекты обращаться к методу. @staticmethod
обозначает метод статическим, то есть он никак не работает с экземпляром, а значит и не принимает self. Её можно вызывать без создания экземпляра. @classmethod
— метод, который привязан к классу, а не к экземпляру класса. Используется, когда вам нужен метод, не относящийся к экземпляру, но тем не менее привязанный к классу. #теория
⚡️ Так что же такое
Это статический метод, которая вызывается, когда мы пытаемся создать экземпляр класса. То есть пишем
Она обязательно возвращает значение — тот самый экземпляр, который мы пытаемся создать.
Принимает она класс, который мы пытаемся создать и те же аргументы, что передаются
#теория
__new__
?Это статический метод, которая вызывается, когда мы пытаемся создать экземпляр класса. То есть пишем
MySuperClass()
.Она обязательно возвращает значение — тот самый экземпляр, который мы пытаемся создать.
Принимает она класс, который мы пытаемся создать и те же аргументы, что передаются
__init__
.#теория
⚡️ Что быстрее, [] или list?
Ответить на этот вопрос поможет timeit. Он используется для измерения скорости выполнения каких-либо задач.
Чем же плох time? Во-первых, с ним неудобно. Во-вторых, на результат влияет огромное количество факторов, начиная загруженностью процессора и заканчивая сборщиком мусора.
Кстати, подробнее ответ на вопрос из названия разбирается в этой статье.
#миниурок #timeit
Ответить на этот вопрос поможет timeit. Он используется для измерения скорости выполнения каких-либо задач.
Чем же плох time? Во-первых, с ним неудобно. Во-вторых, на результат влияет огромное количество факторов, начиная загруженностью процессора и заканчивая сборщиком мусора.
Кстати, подробнее ответ на вопрос из названия разбирается в этой статье.
#миниурок #timeit
Что выведет этот код?
Anonymous Quiz
53%
<class 'function'>
11%
<class 'type'>
18%
<class 'NoneType'>
10%
Ошибку
8%
Узнать ответ
⚡️ Готовим объект к отправке на луну на сервер
Первым делом Python объект надо перевести в строку. Например, в JSON формат. Сделать это лучше всего с помощью marshmallow.
Установка:
Кстати, так же за счёт схем можно переводить строку обратно в объект за счёт той же самой схемы, что мы ранее создали.
Но и не забываем про валидацию, с которой можно познакомиться в документации.
#миниурок #marshmallow
Первым делом Python объект надо перевести в строку. Например, в JSON формат. Сделать это лучше всего с помощью marshmallow.
Установка:
pip install marshmallow
Таким образом вам не нужно добавлять convert_to_json()
в каждый класс, а достаточно просто настроить схему (Schema
) с полями (fields
) от marshmallow.Кстати, так же за счёт схем можно переводить строку обратно в объект за счёт той же самой схемы, что мы ранее создали.
Но и не забываем про валидацию, с которой можно познакомиться в документации.
#миниурок #marshmallow