Comments 9
Переводить даже такие простые статьи непрофессионалу оказалось довольно сложно, буду рад любым замечаниям и дополнениям.
Заголовок у вас несколько кликбейтный. Кто не расскажет? В любом нормальном учебнике рассказывают примерно в пятьсот тридцать два раза лучше и полнее.
Статья только кажется толковой, а на самом деле (ИМХО!) - гавно. Я не имею в виду перевод, вы - молодец. Почему гавно? Да потому что вся эта "игровая атмосфера" с мифами и их разоблачением, как бы сказать чтобы никого не обидеть... для неумных людей. А для умных людей любая технология созданная людьми отвечает на некоторый вопрос, решает какую-то проблему. С этого надо начать. Питон существовал уже пятнадцать лет, когда в него добавили декораторы. Он и без декораторов отлично себя чувствовал. Зачем добавили, делать нефиг было? Нет, добавили потому что заметили часто используемый паттерн. Декораторы - это синтаксический сахар, не более. Объясните, как было без сахара, объясните, в чем смысл паттерна, потом покажите, как сахар делает паттерн лучше и выразительней.
Вот он весь паттерн:
obj = decorator(obj)Здесь нет ни одного мифа, который автор текста мужественно развенчивает.
Я бы сказал, не самый удачный выбор статьи для перевода.
Первая часть банальна и есть в любом учебнике
Вторая часть - сплошные вредные советы. То, что так можно, не значит, что так стоит делать.
Третья часть страдает от синтетических примеров.
Проверка констант в функциях - задача статического анализатора, а не runtime-кода.
Регистрация и диспетчеризация функций - примеры в любых библиотеках для чат ботов, ну или тот же Flask.
Спасибо за мнение! Поделитесь, что именно не стоит делать и почему?
Ну отчасти статья это указывает в послесловии (до которого не все дочитают).
Да, декоратор не обязан возвращать именно функцию. Но это должен быть хотя бы callbale object, а пример со строками - не самый удачный.
@len
@func_name
def nineteen_characters():
"""are in this function's name"""
pass
nineteen_characters
# 19
Вот такое превращение функции в int - хороший способ выстрелить себе в ногу. Ну или не обязательно себе, а тому, что этот код будет разбирать.
Мне интересно, а почему никто никогда не рассказывает про асинхронные декораторы? Тему обычных декораторов разобрали вдоль и поперек, здесь все понятно. А вот иногда надо какую-то решить проблему с асинхронным декоратором, а информации в интернете 0 об это.
Автор сначала доказывает, что "декораторы — это не «функции, которые принимают функции и возвращают функции», а потом во всех полезных примерах исползует именно этот подход :)
Это уже не первая статья которая показывает насколько Python гибкий и многие вещи можно использовать "необычным способом" :)
В книге Лутца есть очень хороший и большой раздел про декораторы. Кому интересна эта тема рекомендую почитать. Тоже много интересных подробностей.
Декораторы, о которых вам не расскажут