argumentli_dekoratsiyalangan_funksiya(pandas, "Science", "Tools")
Natija:
Bu wrapper funksiyasi barcha o'zgaruvchilardan foydalanadi
- argumentli_decoratordan: Pandas Numpy Scikit-learn
- Funksiya chaqiruvidan: Pandas Science Tools
va ularni dekoratsiya qilingan funksiyaga o'tkazadi
Bu dekoratsiyalangan funksiya va u faqat o'zining argumentlarini biladi: Pandas
Science Tools
Ishga yurgiziluvchi decoratorlar
Ko'rib turganimizdek, dekoratorlar funktsiyalarni o'rab olishadi. Dastlabki
funktsiya nomi, uning docstring va parametrlar ro'yxati wrapper yopilishi bilan
yashiringan: Masalan, argumentli_dekoratsiyalangan_funksiya meta-
ma'lumotlariga kirishga harakat qilsak, biz wrapperni yopish metama'lumotlarini
ko'ramiz. Bu ishga yurish paytida qiyinchilik tug'diradi.
print(argumentli_dekoratsiyalangan_funksiya.__name__)
Natija:
wrapper
print(argumentli_dekoratsiyalangan_funksiya.__doc__)
Natija:
Bu o'rovchi(wrapper) funskiya
Ushbu muammoni hal qilish uchun Python functools.wraps dekoratorini taqdim
etadi. Ushbu dekorator yo'qolgan metama'lumotlarni dekoratsiyalanmagan
funksiyadan dekoratsiyalangan closure ga ko'chiradi. Bu quyidagicha amalga
oshiriladi.
def uppercase_decorator(func):
@functools.wraps(func)
def wrapper():
return func().upper()
return wrapper
@uppercase_decorator
def say_hi():
"This will say hi"
return 'hello there'
print(say_hi())
Natija:
HELLO THERE
Say_hi metadatani tekshirganimizda, u endi paketning metama'lumotlarini emas,
balki funktsiya metama'lumotlarini nazarda tutayotganini ko'ramiz.
print(say_hi.__name__)
print(say_hi.__doc__)
Natija:
say_hi
This will say hi
Dekoratorlarni aniqlashda har doim functools.wraps dan foydalanish maqsadga
muvofiq va yaxshi amaliyotdir. Bu ishga yuritish paytida juda chalkashliklardan
xalos qiladi.
Xulosa:
Dekoratorlar to'g'ridan-to'g'ri subklasslardan foydalanmasdan yoki bezatilayotgan
funktsiya manba kodini o'zgartirmasdan funktsiya, metod yoki sinfning ish
faoliyatini dinamik ravishda o'zgartiradilar. Pythonda dekoratorlardan foydalanish
sizning kodingiz DRY(Don't Repeat Yourself-O'zingizni takrorlamang) bo'lishini
ta'minlaydi. Dekoratorlarning bir nechta foydalanish holatlari mavjud:
Flask va Django kabi Python frameworklarida avtorizatsiya uchun
Jurnalizatsiya
Amalga oshirish vaqtini o'lchash
Sinxronizatsiya
Do'stlaringiz bilan baham: |