Funkcijos dekoratorių kūrimas ir sujungimas naudojant Python

Funkcijos dekoratorių kūrimas ir sujungimas naudojant Python
Funkcijos dekoratorių kūrimas ir sujungimas naudojant Python

„Python“ funkcijų tobulinimas naudojant dekoratorius

Python programoje dekoratoriai yra galingas įrankis funkcijų ar metodų elgsenai keisti. Jie leidžia kūrėjams švariai ir skaitomai apvynioti papildomas esamas funkcijas. Suprasdami, kaip kurti ir sujungti dekoratorius, galite žymiai pagerinti savo kodo moduliškumą ir skaitomumą.

Šis straipsnis padės jums sukurti du konkrečius dekoratorius: vieną, kad tekstas būtų paryškintas, o kitas – kursyvu. Taip pat parodysime, kaip sujungti šiuos dekoratorius, kad būtų pasiektas norimas rezultatas. Šios pamokos pabaigoje galėsite iškviesti paprastą funkciją ir gauti suformatuotą eilutę su pusjuodžiu ir kursyvu HTML žymomis.

komandą apibūdinimas
def Apibrėžia funkciją Python.
f"<b>{func()}</b>" Naudoja f-string formatavimą, kad apvyniotų funkcijos grąžinimo reikšmę paryškintomis HTML žymomis.
return wrapper Grąžina vidinio įvyniojimo funkciją, efektyviai sukuriant dekoratorių.
@make_bold Funkcijai pritaiko make_bold dekoratorių.
@add_html_tag("i") Taiko funkcijai add_html_tag dekoratorių su žyma "i".
print(say()) Spausdina funkcijos pasakyti rezultatą, rodydamas dekoruotą išvestį.
def add_html_tag(tag) Apibrėžia aukštesnės eilės funkciją kuriant tinkinamą HTML žymų dekoratorių.
@add_html_tag("b") Taiko funkcijai add_html_tag dekoratorių su žyma "b".

Python funkcijų dekoratorių supratimas

Pateikti scenarijai parodo, kaip sukurti ir sujungti funkcijų dekoratorius „Python“, kad būtų galima pakeisti funkcijų elgseną. „Python“ dekoratorius apibrėžiamas naudojant def raktinis žodis, kad sukurtumėte funkciją, kuri kaip argumentą priima kitą funkciją ir grąžina naują funkciją. The make_bold dekoratorius apvynioja funkcijos, kurią puošia, rezultatą paryškintomis HTML žymomis, naudodamas f-string formatavimą: f"<b>{func()}</b>". Panašiai, make_italic dekoratorius apvynioja rezultatą kursyvu: f"<i>{func()}</i>". Kai šie dekoratoriai pritaikomi funkcijai naudojant @decorator_name sintaksę, jie modifikuoja funkcijos išvestį pridėdami atitinkamas HTML žymas.

Antrasis scenarijus pristato universalesnį požiūrį, sukuriant aukštesnės eilės funkciją, add_html_tag, kuri sukuria dekoratorius bet kuriai nurodytai HTML žymai. Ši funkcija naudoja HTML žymą kaip argumentą ir grąžina dekoratorių, kuris funkcijos išvestį įtraukia į nurodytą žymą: f"<{tag}>{func()}</{tag}>". Naudojant @add_html_tag("b") ir @add_html_tag("i"), galime sujungti šiuos dekoratorius, kad apvyniotume produkciją say_hello funkcija ir pusjuodžiu, ir kursyvu, todėl gaunamas norimas "SveikiŠie pavyzdžiai iliustruoja Python dekoratorių galią ir lankstumą tobulinant ir tinkinant funkcijų elgseną švariu ir pakartotinai naudojamu būdu.

Dekoratorių diegimas ir sujungimas „Python“.

Python scenarijus, skirtas dekoratoriams kurti ir sujungti

def make_bold(func):
    def wrapper():
        return f"<b>{func()}</b>"
    return wrapper

def make_italic(func):
    def wrapper():
        return f"<i>{func()}</i>"
    return wrapper

@make_bold
@make_italic
def say():
    return "Hello"

print(say())

HTML žymų kūrimas naudojant Python dekoratorius

Python scenarijus, skirtas funkcijų modifikavimui ir HTML žymėjimui

def add_html_tag(tag):
    def decorator(func):
        def wrapper():
            return f"<{tag}>{func()}</{tag}>"
        return wrapper
    return decorator

@add_html_tag("b")
@add_html_tag("i")
def say_hello():
    return "Hello"

print(say_hello())

Išplėstinė Python dekoravimo technika

Be paprasto funkcijų modifikavimo, „Python“ dekoratoriai siūlo galingą būdą, kaip pagerinti kodo pakartotinį naudojimą ir priežiūrą. Vienas iš pažangių naudojimo atvejų yra parametrizuoti dekoratoriai, kurie leidžia dekoratoriams priimti argumentus. Ši technika buvo iliustruota su add_html_tag dekoratorius ankstesniuose pavyzdžiuose. Apibrėždami dekoratorių, kuris generuoja kitus dekoratorius, galime sukurti labai lanksčias ir daugkartinio naudojimo kodo struktūras. Parametriniai dekoratoriai leidžia mums perduoti parametrus pačiam dekoratoriui, o tai leidžia dinamiškai ir atsižvelgiant į kontekstą keisti funkcijų elgseną.

Kitas svarbus dekoratorių aspektas yra jų gebėjimas išlaikyti funkcijų metaduomenis. Kai funkciją apvynioja dekoratorius, jos metaduomenys, pvz., pavadinimas ir dokumentų eilutė, gali būti prarasti. Norėdami išsaugoti šiuos metaduomenis, Python's functools.wraps naudojamas dekoratoriuje. Kreipdamiesi @functools.wraps į apvyniojimo funkciją, pirminės funkcijos metaduomenys nukopijuojami, užtikrinant, kad šiais metaduomenimis besiremiantys įrankiai, pvz., dokumentų generatoriai, ir toliau tinkamai veiktų. Be to, dekoratorius galima sukrauti, kaip parodyta su @make_bold ir @make_italic pavyzdžiais, kad būtų galima aiškiai ir skaitomai taikyti kelis elgesio modifikavimo sluoksnius.

Dažni klausimai apie Python dekoratorius

  1. Kas yra „Python“ dekoratorius?
  2. Dekoratorius yra funkcija, pakeičianti kitos funkcijos veikimą, paprastai naudojama funkcionalumui pakartotinai naudoti.
  3. Kaip pritaikyti dekoratorių funkcijai?
  4. Jūs taikote dekoratorių naudodami @decorator_name sintaksė tiesiai virš funkcijos apibrėžimo.
  5. Ar galite pritaikyti kelis dekoratorius vienai funkcijai?
  6. Taip, virš funkcijos gali būti sukrauti keli dekoratoriai, kurių kiekvienas taikomas tokia tvarka, kokia jie pateikiami.
  7. Kas yra parametrizuotas dekoratorius?
  8. Parametras dekoratorius yra dekoratorius, kuris priima argumentus ir leidžia atlikti dinamiškesnius ir lankstesnius pakeitimus.
  9. Kaip palaikote funkcijos metaduomenis, kai naudojate dekoratorius?
  10. Tu naudoji @functools.wraps dekoratoriuje, kad nukopijuotumėte pradinės funkcijos metaduomenis į apvyniojimo funkciją.
  11. Kodėl dekoratoriai naudingi?
  12. Dekoratoriai yra naudingi kodo pakartotiniam naudojimui, skaitomumui ir problemų atskyrimui, nes jie apima funkcijas.
  13. Koks yra tikslas return wrapper pareiškimas dekoratoriuje?
  14. The return wrapper pareiškimas grąžina vidinę funkciją, efektyviai pritaikydamas dekoratoriaus modifikacijas.
  15. Ar dekoratoriai gali būti naudojami klasės metodais?
  16. Taip, dekoratoriai gali būti naudojami tiek klasės, tiek egzemplioriaus metoduose, siekiant pakeisti jų elgesį.
  17. Kaip „Python“ tinkinate dekoratorius?
  18. Norėdami grandinėlės dekoratorius, sudėkite kelis @decorator_name teiginiai virš funkcijos apibrėžimo.
  19. Kam dekoratoriuose naudojamos f-stygos?
  20. F-stygos naudojamos eilėms formatuoti dekoratoriuose, leidžiančios dinamiškai įterpti funkcijų išvestis į konkrečius formatus, pvz., HTML žymas.

„Python“ funkcijų dekoratorių apibendrinimas

Python“ funkcijų dekoratoriai siūlo patikimą funkcijų elgsenos modifikavimo ir tobulinimo metodą. Suprasdami, kaip kurti, taikyti ir grandinės dekoratorius, galite žymiai pagerinti kodo moduliškumą ir skaitomumą. Šiame vadove apžvelgtos pagrindinės sąvokos, pvz., paprasti ir parametrizuoti dekoratoriai, funkcijų metaduomenų išsaugojimas functools.wraps, ir praktiniai dekoratorių pritaikymai, norint pridėti HTML žymas prie funkcijų išvesties. Šių technikų įvaldymas leidžia sukurti dinamiškesnį ir prižiūrimesnį kodą, palengvinant švaresnį ir efektyvesnį programavimo praktiką.