Passing Arguments to Decorators
Python Decorators haqida o'rganamiz.
Dekoratorlarga Argumentlar Uzatish
Ba'zan siz dekoratorga bitta yoki bir nechta argumentlarni uzatishingiz kerak bo'lishi mumkin. Keling, avvalgi func_info()
dekoratorini olib, unga argument berib ko'ramiz va ishlashini tekshirib ko'ramiz:
Agar siz bu kodni ishga tushirsangiz, xato olasiz:
Bu xato biroz chalkash bo'lishi mumkin. Siz dekoratorga butun sonni (integer) uzatdingiz, shuning uchun dekorator butun sonni dekoratsiya qilishga harakat qilmoqda, funktsiyani emas.
Keling, kodni quyidagi tarzda qayta yozamiz:
Endi siz dekoratorni yozayotganda, ichma-ich funksiyalarni (nested functions) ishlatishingiz kerak. Ha, to'g'ri o'qidingiz! Bu yerda uchta funksiyani bir-biriga joylashtirasiz! func_info()
endi argumentlarni qabul qiladi va bu argumentlar the_real_decorator()
va wrapper
tomonidan ham ishlatilishi mumkin.
wrapper()
funksiyasi funktsiya nomi, argumentlar va kalit-argumentlar (kwargs) ni bitta qatorda chop etish uchun qayta yozildi.
Qolgan kodlar avvalgi kabi, faqat endi siz the_real_decorator
ni qaytarasiz, bu esa o'z navbatida wrapper
funksiyasini qaytaradi.
Bu kodni ishga tushirganingizda quyidagi natijani ko'rasiz:
Ichma-ich funksiyalarni ishlatish ba'zi hollarda qiyin bo'lishi mumkin. Yaxshiyamki, dekoratorlarga argumentlarni uzatishning boshqa usuli ham mavjud. Keling, u qanday ishlashini bilib olamiz!
Last updated on