1. Python tili imkoniyatlari Pythonni ko`chirish



Yüklə 2,19 Mb.
səhifə66/78
tarix19.12.2023
ölçüsü2,19 Mb.
#152124
1   ...   62   63   64   65   66   67   68   69   ...   78
1. Python tili imkoniyatlari Pythonni ko`chirish

Argumentli dekoratorlar


Endi esa, argumentlarni qabul qiladigan dekorator yozishga harakat qilamiz:

>>> def decorator_maker():
... print("Men dekoratorlar yarataman! Men faqatgina 1 marta: sen dekorator yaratishimni so`raganingdagina ishga tushaman")
... def my_decorator(func):
... print("Men dekoratorman! Men faqat bir marta: funksiyani dekoratsiyalashda ishga tushaman")



... def wrapped():
... print ("Men dekoratsiyalanayotgan funksiya atrofidagi “qobiq”.\n"
... "Men har safar dekoratsiyalanayotgan funksiya chaqirilganda ishga tushaman.\n"
... "Men dekoratsiyalanayotgan funksiya ishi natijasini chiqaraman.")
... return func()
... print("Men qobiqdagi funksiyani qaytaraman.")
... return wrapped
... print("Men dekoratorni qaytaraman.")
... return my_decorator
...
>>> # Keling, endi dekorator yaratamiz. Bu bor yo`g`I yana bir funksiyaga murojaatdir.
>>> new_decorator = decorator_maker()
Men dekoratorlar yarataman! Men faqatgina 1 marta: sen dekorator yaratishimni so`raganingdagina ishga tushaman.
Men dekoratorni qaytaraman.
>>>
>>> # Endi esa, funksiyani dekoratsiyalaymiz
>>> def decorated_function():
... print("Men – dekoratsiyalanayotgan funksiyaman.")
...
>>> decorated_function = new_decorator(decorated_function)
Men dekoratorman! Men faqat bir marta: funksiyani dekoratsiyalashda ishga tushaman.
Men qobiqdagi funksiyani qaytaraman.
>>> # Endi esa, nihoyat funksiyani chaqiramiz:
>>> decorated_function()
Men har safar dekoratsiyalanayotgan funksiya chaqirilganda ishga tushaman.
Men dekoratsiyalanayotgan funksiya ishi natijasini chiqaraman.
Men – dekoratsiyalanayotgan funksiyaman.

Endi ushbu kodni dekoratorlar yordamida qayta yozib chiqamiz.



>>> @decorator_maker()
... def decorated_function():
... print("Men - dekoratsiyalanayotgan funksiyaman.")
...
Men dekoratorlar yarataman! Men faqatgina 1 marta: sen dekorator yaratishimni so`raganingdagina ishga tushaman
Men dekoratorni qaytaraman.
Men dekoratorman! Men faqat bir marta: funksiyani dekoratsiyalashda ishga tushaman.



Men qobiqdagi funksiyani qaytaraman
>>> decorated_function()
Men dekoratsiyalanayotgan funksiya atrofidagi “qobiq.
Men har safar dekoratsiyalanayotgan funksiya chaqirilganda ishga tushaman.
Men dekoratsiyalanayotgan funksiya ishi natijasini chiqaraman.
Men – dekoratsiyalanayotgan funksiyaman.



>>> def decorator_maker_with_arguments(decorator_arg1, decorator_arg2):
... print("Men dekoratorlar yarataman va men quyidagi argumentlarni oldim:",
... decorator_arg1, decorator_arg2)
... def my_decorator(func):
... print("Men dekoratorman va sen bu argumentlarni menga uzata olding:",
... decorator_arg1, decorator_arg2)
... # dekorator argumentlarini funksiya argumentlari bilan adashtirmang!
... def wrapped(function_arg1, function_arg2):
... print ("Men dekoratsiyalanayotgan funksiya atrofidagi qobiqman.\n"
... "va men barcha argumantlarga murojaat qila olaman\n"
... "\t- va: {0} {1} dekoratoriga\n"
... "\t- va: {2} {3} funksiyaiga\n"
... "Endi kerakli argumentlarni keyingiga uzatishim mumkin"
... .format(decorator_arg1, decorator_arg2,
... function_arg1, function_arg2))
... return func(function_arg1, function_arg2)
... return wrapped
... return my_decorator
...
>>> @decorator_maker_with_arguments("²ÌÕÔÇ×Ë", "¿ÌÒËÕÔ")
... def decorated_function_with_arguments(function_arg1, function_arg2):
... print ("Men dekoratsiyalanayotgan funksiyaman va men faqat o`z argumentlarimni bilaman: {0} "
... " {1} ".format(function_arg1, function_arg2))
...
Men dekoratorlar yarataman va men quyidagi argumentlarni oldim:Leonard Sheldon
Men dekoratorman va sen bu argumentlarni menga uzata olding: Leonard Sheldon
>>> decorated_function_with_arguments("Radjesh", "Govard")
Men dekoratsiyalanayotgan funksiya atrofidagi qobiqman.
va men barcha argumantlarga murojaat qila olaman
- va Leonard Sheldon dekoratoriga
- va Radjesh Govard funksiyasiga
Endi kerakli argumentlarni keyingiga uzatishim mumkin
Men dekoratsiyalanayotgan funksiyaman va men faqat o`z argumentlarimni bilaman: Radjesh Govard

Dekoratorlarning argumentlariga qaytamiz, chunki, agar biz yo`l-yo`lakay dekoratorlarni yaratish uchun funksiyalardan foydalanadigan bo`lsak, biz unga ixtiyoriy argumentlarni uzatishimiz mumkin, shunday emasmi?


Shunday qilib, biz dekoratorlarga xuddi oddiy funksiyalarga bo`lgani kabi, ixtiyoriy argumentlarni uzatishimiz mumkin ekan. Biz zarur hollarda *args va *kwargs lar orqali ochishlardan ham foydalanishimiz mumkin.

Yüklə 2,19 Mb.

Dostları ilə paylaş:
1   ...   62   63   64   65   66   67   68   69   ...   78




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə