Декораторы в python
Как устроены декораторы в python?
Как передать аргументы в декоратор?
Делаем предобработку аргументов в декораторе в python
источник
@BookPython
Как устроены декораторы в python?
Как передать аргументы в декоратор?
Делаем предобработку аргументов в декораторе в python
источник
@BookPython
👍5
Советы по Python
1. Распаковка элементов массива
2. Обмен значений переменных
3. Профилирование и статистика кода
4. Повторение строки
5. Срез
@BookPython
1. Распаковка элементов массива
first_name, last_name = [‘Farhad’, ‘Malik’]
print(first_name) #выводится Farhad
print(last_name) #выводится Malik
2. Обмен значений переменных
first_name, last_name = [‘Farhad’, ‘Malik’]
last_name, first_name = first_name, last_name
print(first_name) #выводит Malik
print(last_name) #выводит Farhad
3. Профилирование и статистика кода
import cProfile, pstats, StringIO
pr = cProfile.Profile() pr.enable()
# ... что-то делает ... pr.disable()
s = StringIO.StringIO()
ps = pstats.Stats(pr, stream=s).sort_stats(‘cumulative’)
ps.print_stats()
print s.getvalue()
4. Повторение строки
‘A’*3 А повторится трижды: AAA
5. Срез
y = ‘Abc’
y[:2] = ab
y[1:] = bc
y[:-2] = a
y[-2:] = bc
@BookPython
👍3
Советы по Python
1. Реверс
2. Отрицательный индекс
Если вы хотите начать с последнего знака, то воспользуйтесь отрицательным индексом.
3. Пересечение множеств
Чтобы найти общее двух множеств
4. Разность множеств
Чтобы найти различия двух множеств:
5. Объединение коллекций
Чтобы получить четко выраженное объединение двух множеств
@BookPython
1. Реверс
x = ‘abc’
x = x[::-1]
2. Отрицательный индекс
Если вы хотите начать с последнего знака, то воспользуйтесь отрицательным индексом.
y = ‘abc’
print(y[-1]) # вернет "c"
3. Пересечение множеств
Чтобы найти общее двух множеств
a = {1,2,3}
b = {3,4,5}
c = a.intersection(b)
4. Разность множеств
Чтобы найти различия двух множеств:
a = {1,2,3}
b = {3,4,5}
c = a.difference(b)
5. Объединение коллекций
Чтобы получить четко выраженное объединение двух множеств
a = {1,2,3}
b = {3,4,5}
c = a.union(b)
@BookPython
👍8
Советы по Python
1. Необязательные аргументы
Мы можем передавать необязательные аргументы через присвоение стандартного значения аргументу:
2. Неизвестное количество аргументов через *arguments
Если функция может принимать любое количество аргументов, то перед названием параметра добавьте *:
3. Словарь в качестве аргумента через **arguments
Так вы сможете передавать в функцию разное количество аргументов ключевых слов.
В качестве аргументов ключевых слов можно также передавать и значения словаря:
4. Функция с несколькими выводами
Если функция должна возвращать несколько значений, то:
5. Цикл в одну строку
@BookPython
1. Необязательные аргументы
Мы можем передавать необязательные аргументы через присвоение стандартного значения аргументу:
def my_new_function(my_value=’hello’):
print(my_value)
#Вызывается
my_new_function() => выводит hello
my_new_function(‘test’) => выводит test
2. Неизвестное количество аргументов через *arguments
Если функция может принимать любое количество аргументов, то перед названием параметра добавьте *:
def myfunc(*arguments):
for a in arguments:
print a
myfunc(a)
myfunc(a,b)
myfunc(a,b,c)
3. Словарь в качестве аргумента через **arguments
Так вы сможете передавать в функцию разное количество аргументов ключевых слов.
В качестве аргументов ключевых слов можно также передавать и значения словаря:
def myfunc(**arguments):
return arguments[‘key’]
4. Функция с несколькими выводами
Если функция должна возвращать несколько значений, то:
resultA, resultB = get_result()
get_result() может вернуть (‘a’, 1), который является кортежем
5. Цикл в одну строку
[Variable] AggregateFunction([Value] for [item] in [collection])
@BookPython
👍3🌚1
Всем, привет, мы исследовательское агентство SmartMinds и сейчас проводим опрос среди IT специалистов. Что хотим узнать: что важно при выборе работодателя, какие каналы являются эффективными при поиске работы и ходите ли вы на мероприятия для IT. Опрос анонимный, займет не более 3-х минут и мы будем благодарны всем, кто примет участие ❤️
Пройти опрос
Пройти опрос
👍1
Советы по Python
1. Объединение списков с помощью Zip
Берет несколько коллекций и возвращает новую коллекцию.
Каждый элемент новой коллекции содержит по одному элементу из всех исходных коллекций.
Так мы получаем «пересечения» сразу по нескольким коллекциям
2. Освобождение памяти
Механизм сборки мусора вручную можно настроить по времени или событиям.
3. Использование декораторов
Декораторы добавляют функциональность коду. То есть это функции, вызывающие другие объекты/функции. Будучи вызываемыми функциями, декораторы возвращают объект, который будет вызываться при вызове функции-декоратора.
Вспомните о декораторах, которые реализуют аспектно-ориентированное программирование.
Мы можем обернуть класс/функцию, и тогда каждый раз при вызове функции будет выполняться определенный код.
Данный пример показывает, как можно вывести название функции. Это тестовый пример для вызова декоратора. С помощью декораторов можно вызывать логгеры (logger), выполнять операции по обеспечению безопасности и т.д.
Теперь воспользуйтесь этим в своих функциях:
4. Распаковка
5. Присоединение коллекции
@BookPython
1. Объединение списков с помощью Zip
Берет несколько коллекций и возвращает новую коллекцию.
Каждый элемент новой коллекции содержит по одному элементу из всех исходных коллекций.
Так мы получаем «пересечения» сразу по нескольким коллекциям
name = ‘farhad’
suffix = [1,2,3,4,5,6]
zip(name, suffix)
→ возвращает (f,1),(a,2),(r,3),(h,4),(a,5),(d,6)
2. Освобождение памяти
Механизм сборки мусора вручную можно настроить по времени или событиям.
import gc
collected_objects = gc.collect()
3. Использование декораторов
Декораторы добавляют функциональность коду. То есть это функции, вызывающие другие объекты/функции. Будучи вызываемыми функциями, декораторы возвращают объект, который будет вызываться при вызове функции-декоратора.
Вспомните о декораторах, которые реализуют аспектно-ориентированное программирование.
Мы можем обернуть класс/функцию, и тогда каждый раз при вызове функции будет выполняться определенный код.
Данный пример показывает, как можно вывести название функции. Это тестовый пример для вызова декоратора. С помощью декораторов можно вызывать логгеры (logger), выполнять операции по обеспечению безопасности и т.д.
def my_logger(function):
@functools.wraps(function)
def logger(*args, **kwargs):
print(function.__name__)
return function(*args, **kwargs)
return logger
Теперь воспользуйтесь этим в своих функциях:
@my_logger
def hi():
print ‘hi’
@my_logger
def bye(a):
print ‘bye’ + a
4. Распаковка
name = ‘farhad’
suffix = [1,2,3,4,5,6]
result = zip(name, suffix)
→ возвращает (f,1),(a,2),(r,3),(h,4),(a,5),(d,6)
unzipped = zip(*result)
5. Присоединение коллекции
name = [“FinTech”, “Explained”]
print(“ “.join(name))
@BookPython
👍3
Советы по Python
1. Объем памяти объекта
2. Вывод текущей директории
3. Вывод импортированных модулей
4. Получение ID текущего процесса
@BookPython
1. Объем памяти объекта
import sys
x = ‘farhadmalik’
print(sys.getsizeof(x))
2. Вывод текущей директории
import os
print(os.getcwd())
3. Вывод импортированных модулей
import sys
imported_modules = [m.__name__ for m in sys.modules.values() if m]
4. Получение ID текущего процесса
import os
os.getpid()
@BookPython
👍3
Python-скрипт на 20 строк, который каждый день желает родителям доброго утра через WhatsApp
Автор материала, перевод которого мы сегодня публикуем, говорит, что современные люди, жизнь которых переполнена работой, часто забывают писать сообщения своим родным и близким. Он, глядя на то, как его родители каждое утро шлют ему в WhatsApp вдохновляющие цитаты и полезные советы о здоровье, решил, что пришло время ответить им взаимностью.
В этом руководстве мы напишем простой Python-скрипт, предназначенный для отправки WhatsApp-сообщений. В ходе работы будем пользоваться Python-пакетом Twilio. Для организации ежеднев
Rus https://habr.com/ru/companies/ruvds/articles/463933/
Eng https://betterprogramming.pub/i-wrote-a-script-to-whatsapp-my-parents-every-morning-in-just-20-lines-of-python-code-5d203c3b36c1
@BookPython
Автор материала, перевод которого мы сегодня публикуем, говорит, что современные люди, жизнь которых переполнена работой, часто забывают писать сообщения своим родным и близким. Он, глядя на то, как его родители каждое утро шлют ему в WhatsApp вдохновляющие цитаты и полезные советы о здоровье, решил, что пришло время ответить им взаимностью.
В этом руководстве мы напишем простой Python-скрипт, предназначенный для отправки WhatsApp-сообщений. В ходе работы будем пользоваться Python-пакетом Twilio. Для организации ежеднев
Rus https://habr.com/ru/companies/ruvds/articles/463933/
Eng https://betterprogramming.pub/i-wrote-a-script-to-whatsapp-my-parents-every-morning-in-just-20-lines-of-python-code-5d203c3b36c1
@BookPython
👍3🔥2
Потрясающе быстрые сборки Docker на Python с помощью Poetry 🏃
Как превратить медленные и утомительные сборки Docker в бесперебойную работу
Создание образов Docker для вашего проекта обычно подразумевает установку его зависимостей воспроизводимым и детерминированным способом. В сообществе Python Poetry является одним из наиболее популярных инструментов для достижения этой цели. Однако неоптимальное использование Poetry в сборках Docker может привести к низкой производительности и длительным сборкам, что в конечном итоге снижает производительность разработчика.
https://medium.com/@albertazzir/blazing-fast-python-docker-builds-with-poetry-a78a66f5aed0
@BookPython
Как превратить медленные и утомительные сборки Docker в бесперебойную работу
Создание образов Docker для вашего проекта обычно подразумевает установку его зависимостей воспроизводимым и детерминированным способом. В сообществе Python Poetry является одним из наиболее популярных инструментов для достижения этой цели. Однако неоптимальное использование Poetry в сборках Docker может привести к низкой производительности и длительным сборкам, что в конечном итоге снижает производительность разработчика.
https://medium.com/@albertazzir/blazing-fast-python-docker-builds-with-poetry-a78a66f5aed0
@BookPython
👍2
Как мы делали скоринг на микросервисной архитектуре руками не-программистов
2023 год — год противоречивых сигналов для будущего IT-отрасли и, в частности, занятости айтишников.
С одной стороны, с поголовной цифровизацией всех сфер и процессов экономики растёт спрос на разработчиков — что, безусловно, плюс для айтишников.
С другой — необходимость участия программистов во многих прежде «аналоговых» процессах как таковая стала превращаться в препятствие для цифровизации. Естественным образом, со стороны заказчиков и работодателей возник спрос на решения, которые позволят оцифровывать и автоматизировать процессы без необходимости заменять весь прежний штат программистами. Компании ищут выходы где угодно, включая надежды на то, что программистов заменят нейросети.
https://habr.com/ru/articles/731596/
@BookPython
2023 год — год противоречивых сигналов для будущего IT-отрасли и, в частности, занятости айтишников.
С одной стороны, с поголовной цифровизацией всех сфер и процессов экономики растёт спрос на разработчиков — что, безусловно, плюс для айтишников.
С другой — необходимость участия программистов во многих прежде «аналоговых» процессах как таковая стала превращаться в препятствие для цифровизации. Естественным образом, со стороны заказчиков и работодателей возник спрос на решения, которые позволят оцифровывать и автоматизировать процессы без необходимости заменять весь прежний штат программистами. Компании ищут выходы где угодно, включая надежды на то, что программистов заменят нейросети.
https://habr.com/ru/articles/731596/
@BookPython
👍1🤔1
8 лучших алгоритмов, которые должен знать каждый программист 💯
В программировании алгоритм - это набор инструкций или процедура решения конкретной проблемы или выполнения конкретной задачи. Алгоритмы могут быть выражены на любом языке программирования и представлять собой как простую последовательность базовых операций, так и сложный многоэтапный процесс, включающий различные структуры данных и логику. Основная цель алгоритма - принять входные данные, обработать их и выдать ожидаемый результат. Алгоритмы можно классифицировать по временной и пространственной сложности, по технике, используемой для решения задачи, и по типу решаемой задачи. Примерами алгоритмов являются сортировка, поиск, обход графов, работа со строками, математические операции и многое другое.
https://python.plainenglish.io/top-8-algorithms-every-programmer-should-know-93c826267938
@BookPython
В программировании алгоритм - это набор инструкций или процедура решения конкретной проблемы или выполнения конкретной задачи. Алгоритмы могут быть выражены на любом языке программирования и представлять собой как простую последовательность базовых операций, так и сложный многоэтапный процесс, включающий различные структуры данных и логику. Основная цель алгоритма - принять входные данные, обработать их и выдать ожидаемый результат. Алгоритмы можно классифицировать по временной и пространственной сложности, по технике, используемой для решения задачи, и по типу решаемой задачи. Примерами алгоритмов являются сортировка, поиск, обход графов, работа со строками, математические операции и многое другое.
https://python.plainenglish.io/top-8-algorithms-every-programmer-should-know-93c826267938
@BookPython
👍4
Создание Python REPL с поддержкой ChatGPT
В этом блоге я делюсь своим опытом создания Python REPL, дополненного ChatGPT. Я рассказываю о том, как создавалось приложение, и рассуждаю о паттернах и парадигмах программной инженерии, которые могут появиться в системах, построенных на основе больших языковых моделей (LLM).
https://isthisit.nz/posts/2023/building-a-chat-gpt-enhanced-python-repl/
@BookPython
В этом блоге я делюсь своим опытом создания Python REPL, дополненного ChatGPT. Я рассказываю о том, как создавалось приложение, и рассуждаю о паттернах и парадигмах программной инженерии, которые могут появиться в системах, построенных на основе больших языковых моделей (LLM).
https://isthisit.nz/posts/2023/building-a-chat-gpt-enhanced-python-repl/
@BookPython
👍1
diagrams
🎨 Диаграмма как код для прототипирования архитектур облачных систем
https://github.com/mingrammer/diagrams
@BookPython
🎨 Диаграмма как код для прототипирования архитектур облачных систем
https://github.com/mingrammer/diagrams
@BookPython
👍4
Подборка Telegram каналов для программистов
Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Excel лайфхак📌
https://t.me/Excel_lifehack
Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Excel лайфхак📌
https://t.me/Excel_lifehack
❤1🦄1
Метод partition()
Метод partition() разбивает строку по заданной подстроке. После этого результат возвращается в виде кортежа. При этом подстрока, по которой осуществлялась разбивка, тоже входит в кортеж.
@BookPython
Метод partition() разбивает строку по заданной подстроке. После этого результат возвращается в виде кортежа. При этом подстрока, по которой осуществлялась разбивка, тоже входит в кортеж.
@BookPython
👍4
Сортировка данных CSV файла на Python 🐍
В этом коде мы открываем файл input.csv, считываем его содержимое в список data, сортируем список по первому столбцу и записываем отсортированные данные в новый файл output.csv.
@BookPython
В этом коде мы открываем файл input.csv, считываем его содержимое в список data, сортируем список по первому столбцу и записываем отсортированные данные в новый файл output.csv.
@BookPython
👍3
9 способов совместного использования массива Numpy между процессами
Существует множество способов передачи массива numpy между процессами, например, как аргумент функции, как наследуемая глобальная переменная, через очередь или трубу, как ctype Array и RawArray, файл с привязкой к памяти, массив с поддержкой SharedMemory или через менеджер.
В этом уроке вы познакомитесь с набором подходов, которые можно использовать для совместного использования массива numpy между процессами python.
https://superfastpython.com/numpy-share-array-processes/
@BookPython
Существует множество способов передачи массива numpy между процессами, например, как аргумент функции, как наследуемая глобальная переменная, через очередь или трубу, как ctype Array и RawArray, файл с привязкой к памяти, массив с поддержкой SharedMemory или через менеджер.
В этом уроке вы познакомитесь с набором подходов, которые можно использовать для совместного использования массива numpy между процессами python.
https://superfastpython.com/numpy-share-array-processes/
@BookPython
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
QR + Tetris = QRTetris
Установка
https://github.com/Firemoon777/qrtetris
@BookPython
Установка
git clone https://github.com/Firemoon777/qrtetris.git
python3 -m pip install -r requirements
https://github.com/Firemoon777/qrtetris
@BookPython
👍9
Python декораторы на максималках. Универсальный рецепт по написанию и аннотированию от мала до велика
Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python. С декораторами, наверное, знакомы все джуны (хотя бы в рамках подготовки к собеседованиям). Однако, крайне мало разработчиков пишут их правильно. Особенно принимая во внимания тенденции последних нескольких лет к аннотированию всего и вся. Даже популярные open-source проекты (если основная часть их кода была написана до 2018 года) вряд ли дадут вам примеры декораторов, отвечающих всем современным требованиям к коду.
https://habr.com/ru/articles/750312/
@BookPython
Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python. С декораторами, наверное, знакомы все джуны (хотя бы в рамках подготовки к собеседованиям). Однако, крайне мало разработчиков пишут их правильно. Особенно принимая во внимания тенденции последних нескольких лет к аннотированию всего и вся. Даже популярные open-source проекты (если основная часть их кода была написана до 2018 года) вряд ли дадут вам примеры декораторов, отвечающих всем современным требованиям к коду.
https://habr.com/ru/articles/750312/
@BookPython
👍4