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


Уверен, что награда за понимание того, как в Python работают декора-



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

Уверен, что награда за понимание того, как в Python работают декора-
торы, может быть огромной.
Несомненно, декораторы довольно сложны, чтобы твердо усвоить их 
с первого раза, но они — очень полезное функциональное средство языка, 
с которым вы будете часто сталкиваться в сторонних платформах и в стан-
дартной библиотеке Python. В любом хорошем обучающем пособии по 
Python задача объяснения декораторов относится к разряду пан или пропал
Здесь я приложу все усилия, чтобы шаг за шагом познакомить вас с ними.
Правда, прежде чем вы погрузитесь в эту тему, сейчас самый подходящий 
момент, чтобы освежить память относительно свойств функций первого 


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


3 .3 . Сила декораторов 83
Давайте его применим, чтобы декорировать (или обернуть) еще одну 
функцию:
def greet():
return 'Привет!' 
greet = null_decorator(greet) 
>>> greet() 
'Привет!'
В этом примере я определил функцию 
greet
и сразу же ее декорировал, 
пропустив через функцию 
null_decorator
. Понимаю, пока это все вы-
глядит бесполезным. Я ведь о том, что мы намеренно спроектировали 
пустой декоратор бесполезным, верно? Но через мгновение этот пример 
разъяснит, как работает специальный синтаксис Python, предназначенный 
для декораторов.
Вместо того чтобы явным образом вызывать 
null_decorator
с функцией 
greet
и затем по-новому присваивать его переменной, удобнее восполь-
зоваться синтаксисом Python 
@
для декорирования функции:
@null_decorator 
def greet(): 
return 'Привет!' 
>>> greet() 
'Привет!'
Размещение строки 
@null_decorator
перед определением функции анало-
гично тому, что функция сначала определяется и затем уже прогоняется 
через декоратор. Синтаксис 
@
является всего лишь синтаксическим саха-

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   25   26   27   28   29   30   31   32   ...   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