Б41 Чистый Python. Тонкости программирования для профи. Спб.: Питер



Download 6,94 Mb.
Pdf ko'rish
bet28/80
Sana24.02.2022
Hajmi6,94 Mb.
#212875
1   ...   24   25   26   27   28   29   30   31   ...   80
Bog'liq
978544610803 Chisty Python Tonko

# Вредно: 
>>> class Car: 
... rev = lambda self: print('Бум!') 
... crash = lambda self: print('Бац!') 
>>> my_car = Car() 
>>> my_car.crash() 
'Бац!' 
Похожие чувства у меня и по поводу запутанных конструкций 
map()
и 
filter()
с использованием лямбд. Обычно гораздо лучше использовать 
конструкцию включения в список или в выражение-генератор:
# Вредно: 
>>> list(filter(lambda x: x % 2 == 0, range(16))) 
[0, 2, 4, 6, 8, 10, 12, 14] 
# Лучше: 
>>> [x for x in range(16) if x % 2 == 0] 
[0, 2, 4, 6, 8, 10, 12, 14]
Если вы заметили, что с лямбда-выражениями получаете что-то хотя 
бы отдаленно сложное, то лучше обратитесь к определению автономной 
функции с подходящим именем.
В конечном счете экономия нескольких нажатий клавиш не будет иметь 
значения, зато ваши коллеги (и вы сами в будущем) оценят чистый и удо-
бочитаемый код больше, чем лаконичное колдовство.


80 Глава 3 • Эффективные функции
Ключевые выводы
‰
‰
Лямбда-функции — это функции одного-единственного выражения, 
которые не обязательно привязаны к имени (анонимны).
‰
‰
В лямбда-функциях нельзя использовать обычные инструкции Python, 
и в них всегда содержится неявная инструкция возврата 
return
.
‰
‰
Всегда спрашивайте себя: обеспечит ли применение обычной (именован-
ной) функции либо конструкции включения в список большую ясность?
3 .3 . Сила декораторов
В своей основе декораторы Python позволяют расширять и изменять 
поведение вызываемых объектов (функций, методов и классов) без не-
обратимой модификации самих вызываемых объектов.
Любая достаточно универсальная функциональность, которую можно 
прикрепить к существующему классу или поведению функции, является 
отличным кандидатом для декорирования. Сюда входят:
‰
‰
ведение протокола операций (журналирование);
‰
‰
обеспечение контроля за доступом и аутентификацией;
‰
‰
функции инструментального оформления и хронометража;
‰
‰
ограничение частоты вызова API;
‰
‰
кэширование и др.
Итак, зачем осваивать использование декораторов в Python? В конце кон-
цов, только что упомянутое мною выше выглядит довольно абстрактным, 
и, вполне возможно, вообще сложно увидеть, какую пользу принесут де-
кораторы в повседневной работе разработчика. Позвольте мне несколько 
прояснить этот вопрос, предоставив вам вполне реальный пример.
Предположим, в вашей программе составления отчетности есть 30 функ-
ций с бизнес-логикой. Одним дождливым утром понедельника ваш босс 
подходит к вашему столу и заявляет: «Доброго понедельника! Помните 


3 .3 . Сила декораторов 81
ту отчетность по TPS? Мне нужно, чтобы вы в каждый шаг генератора 
отчетов добавили ведение протокола входных и выходных операций. Ком-
пании XYZ это нужно для аудиторских целей. Да, и еще. Я им сказал, что 
к среде мы сможем все отправить».
В зависимости от того, насколько вы разбираетесь в декораторах, от этого 
поручения либо у вас подскочит давление, либо вы останетесь в относи-
тельном спокойствии.
Без декораторов следующие три дня вам пришлось бы провести в попыт-
ках модифицировать каждую из этих 30 функций, приводя их в полный 
беспорядок ручными вызовами операции журналирования. Чудесно, не 
правда ли?
А если вы знаете свои декораторы, вы спокойно улыбнетесь своему боссу 
и скажете: «Не беспокойся, Джим. Я сделаю это сегодня к 14:00».
Сразу после этого вы наберете исходный код для универсального декора-
тора 
@audit_log
(всего порядка 10 строк кода) и быстро вставите его перед 
каждым определением функции. Затем вы зафиксируете код в GitHub 
и перехватите очередную чашечку кофе…
Здесь я драматизирую, но лишь капельку. Декораторы действительно 
бывают такими мощными. Я даже сказал бы, что для любого серьезного 
программиста на Python понимание декораторов является важной вехой. 
Они требуют твердого усвоения нескольких продвинутых концепций 
языка, включая свойства функций первого класса.

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   24   25   26   27   28   29   30   31   ...   80




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish