IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 16. diel - Dekorátory v Pythone

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Jakub Ježek
Člen
Avatar
Jakub Ježek:4. januára 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?

 
Odpovedať
4. januára 19:47
Avatar
Karel Zaoral
Člen IT Redactor Gang
Avatar
Odpovedá na Jakub Ježek
Karel Zaoral:4. januára 19:57

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

 
Odpovedať
4. januára 19:57
Avatar
Dušan Kovářík:22. januára 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é.

Editované 22. januára 22:20
 
Odpovedať
22. januára 22:19
Avatar
Odpovedá na Karel Zaoral
Lenka Chalupová:27. februára 14:32

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

 
Odpovedať
27. februára 14:32
Avatar
Radek Schlosser:27. februára 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

 
Odpovedať
27. februára 23:29
Avatar
Lenka M.
Člen
Avatar
Lenka M.:1. mája 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?

Editované 1. mája 7:58
 
Odpovedať
1. mája 7:57
Avatar
Odpovedá na Lenka M.
Anna Drahotová:9. mája 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ů.

**

Editované 9. mája 23:21
 
Odpovedať
9. mája 23:20
Avatar
Lenka M.
Člen
Avatar
Odpovedá na Anna Drahotová
Lenka M.:10. mája 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...

 
Odpovedať
10. mája 13:04
Avatar
Odpovedá na Lenka M.
Anna Drahotová:10. mája 16:16

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

 
Odpovedať
10. mája 16:16
Avatar
Lukáš Libovický:21. júna 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

 
Odpovedať
21. júna 9:17
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!