NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 17 - Dekorátory v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Jakub Ježek
Člen
Avatar
Jakub Ježek:4.1.2024 19:47

Mohu se prosím zeptat?
obalena_funkce() je vnitřní funkce, která "obaluje" dekorovanou funkci a přidává k ní nové chování. Když je tato funkce volána, vypíše zprávu před spuštěním dekorované funkce func() a další zprávu po jejím dokončení
Proč se funkce která něco obaluje, jmenuje "obalena_funkce"? Nebylo by logičtější, kdyby se jmenovala "obalujici_funkce"? Nebo jsem to špatně pochopil?

 
Odpovědět
4.1.2024 19:47
Avatar
Karel Zaoral
Člen
Avatar
Odpovídá na Jakub Ježek
Karel Zaoral:4.1.2024 19:57

Ahoj Jakube, bylo by to logičtější. O víkendu to upravím, díky!

 
Odpovědět
4.1.2024 19:57
Avatar
Dušan Kovářík:22.1.2024 22:19

Velmi zajímavé téma a určitě ne snadno vysvětlitelné. Nicméně, kdybych si jinde nedohledal, jak v Pythonu fungují vnitřní funkce a nedozvěděl se o tzv. uzávěrech (closures), nepochopil bych, jak dekorátory fungují "pod pokličkou". Poznámka ke konci lekce - funkce vypocitej() v ukázce kódu nic nevrací, pouze vypisuje - tím pádem i přiřazování výsledku do proměnné vysledek a její vracení v příkazech return je zde zbytečné.

Editováno 22.1.2024 22:20
 
Odpovědět
22.1.2024 22:19
Avatar
Odpovídá na Karel Zaoral
Lenka Chalupová:27.2.2024 14:32

Nezapomněl jste to opravit? Protože já to stále vidím a mate mě to stejně jako Jakuba..

 
Odpovědět
27.2.2024 14:32
Avatar
Radek Schlosser:27.2.2024 23:29

Špatně není nic, jen chci napsat komentář :-)

Tak tohle dalo celkem zabrat, ale nakonec jsem si uvědomil, že je tato konstrukce logická a naráz se to zdá jednoduché. Ve skutečnosti jsem už někdy v průběhu čtení a testování vše pochopil správně, ale pak jsem zase několikrát zaváhal. Po přečtení posledního odstavce jsem si definivně ověřil, že to chápu správně.

Díky za vysvětlení! Radek

 
Odpovědět
27.2.2024 23:29
Avatar
Lenka M.
Člen
Avatar
Lenka M.:1.5.2024 7:57

Mohla bych se prosím zeptat?
Jedné funkci můžeme přiřadit více dekorátorů. Mluvíme pak o vícenásobném dekorování. Dekorátory se aplikují ve vrstvách, přičemž první dekorátor, který je aplikován, je ten nejblíže funkci. Poslední dekorátor je ten, který se nachází nejvýše.
Zdroj: https://www.itnetwork.cz/…ry-v-pythonu

@validuj_vstup
@zmer_cas
@vypocet_objemu_krychle
def obsah_ctverce(a):
    time.sleep(1)  # na sekundu zdržíme běh programu, jinak je tak rychlý, že bychom dostali čas běhu nulový.
    return a**2

obsah_ctverce(3)

hned za příkladem je poté napsáno:
Prvním dekorátorem, který se aplikuje, je @validuj_vstup,kt­erý obaluje funkci obsah_ctverce().
Zdroj: https://www.itnetwork.cz/…ry-v-pythonu

vypocet_objemu_krychle(z­mer_cas(validuj_vstup(ob­sah_ctverce)))(3)

pokud to zkouším správně .... nemělo by to být v tomto případě:
validuj_vstup(zm­er_cas(vypocet_ob­jemu_krychle(ob­sah_ctverce)))(3) ?

Když to zkouším takto tak vyjde i výsledek ve stejném pořadí...
nebo jsem to jen špatně pochopila?

Editováno 1.5.2024 7:58
 
Odpovědět
1.5.2024 7:57
Avatar
Odpovídá na Lenka M.
Anna Drahotová:9.5.2024 23:20

Z toho jsem také zmatená. Přijde mi, že si věty odporují

  • ** -první dekorátor, který je aplikován, je ten nejblíže funkci. Poslední dekorátor je ten, který se nachází nejvýše**.
  • **Je tedy důležité si uvědomit, že dekorátory se spouštějí v sestupném pořadí shora dolů.

**

Editováno 9.5.2024 23:21
 
Odpovědět
9.5.2024 23:20
Avatar
Lenka M.
Člen
Avatar
Odpovídá na Anna Drahotová
Lenka M.:10.5.2024 13:04

Ahoj.
To si podle me neodporuje.. oni se spousti ze shora dolu ale apilikuji se ze sdola nahoru... ( Neboli prvni se spusti ten nahore.. .. ale vysledek dostaneme prvni od toho nejnize....) , nebo aspon jsem to takhle pochopila...
Ale stale si myslim ze si odporuji ty dva priklady...

 
Odpovědět
10.5.2024 13:04
Avatar
Odpovídá na Lenka M.
Anna Drahotová:10.5.2024 16:16

Díky. V neděli jdu na školení, snad to pak pochopím

 
Odpovědět
10.5.2024 16:16
Avatar
Lukáš Libovický:21.6.2024 9:17

Úplně jsem z textu nepochopil jak přesně funguje předávání argumentů pomocí *args a **kwargs
Když jsem si to potom zkoušel tak jsem to snad pochopil, ale zatím první lekce kde jsem se zasekl a něco nepochopil

 
Odpovědět
21.6.2024 9:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 23.