Umumiy maqsadli decoratorlar yaratish
https://www.datacamp.com/community/tutorials/decorators-python
Har qanday funktsiyaga tatbiq etilishi mumkin bo'lgan umumiy maqsadli
dekoratorni yaratish uchun args, ** kvargs.args hamda **kwargs lardan
foydalanamiz. Ular barcha pozitsion va kalit so'zlar argumentlarini to'playdi va
ularni arg va kwargs o'zgaruvchilarida saqlaydi. args va kwargs lar bizga funksiya
chaqiruvlari paytida istagancha argumentlarni o'tkazishga imkon beradi.
def ixtiyoriy_argument_utkazuvchi_decorator(decoratsiyalanuvchi_funksiya):
def ixtiyoriy_argument_oluvchi_wrapper(*args,**kwargs):
print('Pozitsiyali argumentlar: ', args)
print("Kalit so'zli argumentlar: ", kwargs)
decoratsiyalanuvchi_funksiya(*args)
return ixtiyoriy_argument_oluvchi_wrapper
@ixtiyoriy_argument_utkazuvchi_decorator
def argumentsiz_funksiya():
print("Bu yerda argumentlar yo'q ")
argumentsiz_funksiya()
Endi pozitsiyali argumentli decorator ni qaraymiz
def ixtiyoriy_argument_utkazuvchi_decorator(decoratsiyalanuvchi_funksiya):
def ixtiyoriy_argument_oluvchi_wrapper(*args,**kwargs):
print('Pozitsiyali argumentlar: ', args)
print("Kalit so'zli argumentlar: ", kwargs)
decoratsiyalanuvchi_funksiya(*args)
return ixtiyoriy_argument_oluvchi_wrapper
@ixtiyoriy_argument_utkazuvchi_decorator
def argumentsiz_funksiya(a, b, c):
print(a, b, c)
argumentsiz_funksiya(1, 2, 3)
Natija:
Pozitsiyali argumentlar: (1, 2, 3)
Kalit so'zli argumentlar: {}
1 2 3
Kalit so’zli argumentlardan foydalanish
def ixtiyoriy_argument_utkazuvchi_decorator(decoratsiyalanuvchi_funksiya):
def ixtiyoriy_argument_oluvchi_wrapper(*args,**kwargs):
print('Pozitsiyali argumentlar: ', args)
print("Kalit so'zli argumentlar: ", kwargs)
decoratsiyalanuvchi_funksiya(*args)
return ixtiyoriy_argument_oluvchi_wrapper
@ixtiyoriy_argument_utkazuvchi_decorator
def kalitSuzli_argumentli_funksiya():
print("Bu funksiya kalit so'zli argumentlarni namoyish qiladi")
kalitSuzli_argumentli_funksiya(first_name="Zohidjon", last_name="Kaytarov")
Natija:
Pozitsiyali argumentlar: ()
Kalit so'zli argumentlar: {'first_name': 'Zohidjon', 'last_name': 'Kaytarov'}
Bu funksiya kalit so'zli argumentlarni namoyish qiladi
Argumentlarni decoratorga o’tkazish
def argumentli_decorator(decorator_arg1, decorator_arg2, decorator_arg3):
def decorator(funksiya):
def wrapper(funksiya_arg1, funksiya_arg2, funksiya_arg3) :
"Bu o'rovchi(wrapper) funskiya"
print("Bu wrapper funksiyasi barcha o'zgaruvchilardan foydalanadi \n"
"\t- argumentli_decoratordan: {0} {1} {2}\n"
"\t- Funksiya chaqiruvidan: {3} {4} {5}\n"
"va ularni dekoratsiya qilingan funksiyaga o'tkazadi"
.format(decorator_arg1, decorator_arg2,decorator_arg3,
funksiya_arg1, funksiya_arg2,funksiya_arg3))
return funksiya(funksiya_arg1, funksiya_arg2, funksiya_arg3)
return wrapper
return decorator
pandas = "Pandas"
@argumentli_decorator(pandas, "Numpy","Scikit-learn")
def argumentli_dekoratsiyalangan_funksiya(funksiya_arg1, funksiya_arg2,
funksiya_arg3):
print("Bu dekoratsiyalangan funksiya va u faqat o'zining argumentlarini biladi:
{0}"
" {1}" " {2}".format(funksiya_arg1, funksiya_arg2, funksiya_arg3))
Do'stlaringiz bilan baham: |