Питхон

Питхон Децораторс

Питхон Децораторс
У овом чланку ћемо разговарати о Питхон Децораторс.

Дефиниција: Декоратор је образац дизајна у Питхону. То је функција која узима другу функцију као аргумент, додаје јој неку функционалност без модификације и враћа другу функцију.

То се назива употребом „(@)“ и поставља се пре дефинисања функције коју желимо да украсимо.

синтакса:

@децоратор наме
Дефиниција функције

Да бисмо разумели декоратере, морамо знати доње концепте.
Функције су првокласни објекти. То значи да се функција може проследити као аргумент, може се вратити из друге функције, може се доделити променљивој, може се дефинисати у другој функцији. За боље разумевање погледајте примере у наставку.

  1. Функција се може проследити као аргумент
    Пример:

    деф инкремент (н):
    повратак н + 1
    деф демо_фунцалл (функција):
    нум = 5
    функција повратка (нум)
    демо_фунцалл (прираштај)

    Овде се функција повећања преноси као аргумент

    пример1.пи:

    Излаз:

    >> пример питхон1.пи

  2. Функција се може вратити из друге функције
    Пример:

    деф жеља ():
    деф саи_висх ():
    повратак "Срећан рођендан"
    врати саи_висх
    здраво = жеља ()
    Здраво()

    пример2.пи:

    Излаз:

    >> пример питхон2.пи

    Овде се функција саи_висх вратила из функције жеља

  3. Функција се може изменити и доделити променљивој
    Пример:

    деф додај (а, б):
    врати а + б
    сум2нос = адд # Овде је функција додата променљивој
    сум2нос (5,11)

    пример3.пи:

    Излаз:
    >> пример питхон3.пи

  4. Дефинишите функцију унутар друге функције
    Пример:

    деф додај (а, б):
    деф сум2 (а, б):
    врати а + б
    рес = сум2 (а, б)
    повратак рез
    додај (10,15)

    пример4.пи:

    Излаз:
    >> пример питхон4.пи

Затварање:

Питхон омогућава угнежђеној функцији приступ спољном опсегу функције која обухвата.

деф поздрав (порука):
"Енцлосонг функција"
деф сенд_греетинг ():
„Угњежђена функција“
испис (порука)
Пошаљи поздраве()
поздрав ("Добро јутро")

пример5.пи:

Излаз:

>> пример питхон5.пи

Након што сада разумемо горње концепте, написаћемо пример декоратера.

Пр1: Овде ћемо украсити функцију поруке. Штампање поруке унутар **** без модификовања оригиналне функције, тј.е., функција поруке.

#децоратор старт
деф принт_мсг (функција):
деф омот ():
функција ()
повратни омотач
#децоратор енд
деф порука ():
принт („Ово је први пример за демонстрирање декоратора“)
здраво = принт_мсг (порука)
Здраво()

пример6.пи:

Излаз:

>> пример питхон6.пи

У најједноставнијем облику, можемо поставити декоратор на врх дефиниције функције и позвати функцију као што је приказано доле:

Овде коју год жицу желимо да украсимо унутар ***, користите овај декоратор.

Излаз:

Вишеструки декоратор:

Можемо имати више декоратера за једну функцију. Овде се декоратор примењује редоследом који смо позвали.
синтакса:
@ децоратор2
@ децоратор1
Дефиниција функције

Овде ће бити примењен 1., затим други.

Прослеђивање аргумената функцијама декоратора:

Можемо проследити аргументе функцији омотача. Аргументи прослеђени функцији за коју желимо да се украсимо.

Пример:

деф децо_висх (функција):
деф омот (арг1, арг2):
принт ('Прослеђени аргументи су', арг1, арг2)
испис ('*********************')
функција (арг1, арг2)
испис ('*********************')
повратни омотач
@децо_висх
деф жеља (а1, а2):
испис (а1, а2)
жеља ('Добро', 'Јутро')
жеља ('Добро', 'Поподне')

пример7.пи:

Излаз:

>> пример питхон7.пи

Прослеђивање променљивог броја аргумената функцији декоратора:

Можемо проследити било који број аргумената користећи * аргс (аргументи који нису кључне речи попут бројева) и ** кваргс (аргументи кључних речи попут речника). Оба су положајни аргументи и аргументе чувају у варијаблама аргс и кваргс.

Напомена: Овде можемо да користимо било које име уместо аргс и кваргс, али ова имена се препоручује за употребу.

Пример:

деф дец_вар_аргс (функција):
деф омот (* аргс, ** кваргс):
принт ('Аргументи који нису кључне речи су', аргс)
принт ('Аргументи кључне речи су', кваргс)
функција (* аргс)
повратни омот
@ дец_вар_аргс
деф фун_нон_кеи_аргс (* аргс):
јер ја у расправама:
испис (и)
@ дец_вар_аргс
деф фун_кеи_аргс ():
испис („Аргументи кључних речи“)
фун_нон_кеи_аргс ((4,5,6))
фун_кеи_аргс (фнаме = 'Ананд', лнаме = 'Математика')

пример8.пи:

Излаз:

>> пример питхон8.пи

Пр2: Претпоставимо да имамо 2 функције
Функција1: Израчунај збир бројева са дате листе
Функција2: Помножите сваки број са 2 и додајте их на дату листу бројева
Ако желимо да израчунамо време потребно за извршење, то можемо учинити на 2 начина

  1. Поставите код између времена почетка и завршетка сваке функције
  2. Напишите декоратер за израчунавање времена

Погледајте доњи код решен помоћу декоратера:

#децоратор старт
еке_тиме_цалц (фунц):
деф омот (арг):
старт_тиме = датум и време.Датум време.Сада()
фунц (арг)
крај_времена = датум-време.Датум време.Сада()
принт ("Време потребно за извршавање функције" + функ.__наме__ + "је" + стр (крај_времена - крај_времена))
повратни омот
#децоратор енд
@еке_тиме_цалц
деф цал_авг (подаци):
сума = 0
за и у подацима:
сума + = и
принт ("Просек дате листе бројева је", сума // лен (подаци))
@еке_тиме_цалц
деф мул_би_2 (подаци):
сума = 0
за и у подацима:
збир + = + (и * 2)
принт ("Збир свих бројева након што се помножи са 2 је", збир)
цал_авг ([10,20,30,40,50])
мул_би_2 ([10,20,30,40,50])

пример9.пи:

Излаз:

>> пример питхон9.пи

Горњи декоратор се може користити за израчунавање времена извршења било које функције. Коришћењем декоратера можемо избећи понављање кода када имамо захтев за израчунавање времена извршења да се декоратер постави изнад дефиниције функције.

Закључак:

Декоратори мењају функционалност функције / методе без промене оригиналног кода функције која се украшава. Користећи ово, можемо избећи писање поновљеног кода. Познавање концепта декоратора учиниће нас снажним у питону. Декоратер можемо користити у следећим случајевима:

Како се користи ГамеЦонкуерор Цхеат Енгине у Линуку
Чланак покрива водич о коришћењу ГамеЦонкуерор варалице у Линуку. Многи корисници који играју игре на Виндовс-у често користе апликацију „Цхеат Енгине...
Најбољи емулатори играће конзоле за Линук
Овај чланак ће навести популарни софтвер за емулацију играће конзоле доступан за Линук. Емулација је слој компатибилности софтвера који опонаша хардве...
Најбољи Линук Дистрос за игре у 2021
Линук оперативни систем далеко је превалио свој изворни, једноставни изглед заснован на серверима. Овај ОС се изузетно побољшао последњих година и сад...