Python kurz v Slovenčine | Lekcia 27 | Dekorátory

Поділитися
Вставка
  • Опубліковано 24 гру 2024

КОМЕНТАРІ • 22

  • @oriesokdk
    @oriesokdk 3 роки тому

    Ďakujem za ďalšie zaujímavé video...

  • @petrvavrinec9481
    @petrvavrinec9481 3 роки тому +2

    Domácí úlohu jsem zatím nevyřešil, ale snažím se. Ale mám dotaz. Dekorátor, resp. jeho definici, musím v kódu umístit PŘED definici funkce, kterou chci dekorovat. To samé platí pro volání toho dekorátoru pomocí syntaktického cukru @decorator, to musí být také umístěno TĚSNĚ PŘED definicí funkce, kterou chci dekorovat. Jak ale odekoruji funkci, kterou jsem třeba ani nenapsal já, která je třeba v jiném modulu a já si jí "jenom" importuji???

    •  3 роки тому +1

      To definovanie plati pre @ zápis dekorovat vies aj takto (ukazoval som to ako prvú možnosť)
      funkcia = dekorator(funkcia)
      a podom vies volat funkcia()
      To je aj odpoveď na tvoju otázku s importovanou funkciou :)

  • @tobo_sk4409
    @tobo_sk4409 3 роки тому +1

    Prosím, nemohol by si urobiť video o dynamických premenných vo for cykloch?

  • @ondrejkoval2446
    @ondrejkoval2446 10 місяців тому

    def decorators(*args):
    def wrapper(func):
    multiple = [func() for _ in range(args[0])]
    return multiple
    return wrapper
    #Voolanie funkcie napr 2x:
    @decorators(2)
    def show_me():
    print('Hello world')

  • @diviaklesny5100
    @diviaklesny5100 3 роки тому

    Dobrý deň ,
    Chcel by som sa Vás opýtať , či neviete mi povedať , prečo vždy keď zapnem nejaký môj kód vo visual studio code mi reaguje len prvý riadok terminálu ? Napríklad napíšem a=str(input(("Ahoj, ako sa máš ? "))
    print(a)
    Output v termináli : Ahoj, ako sa máš? Dobre
    PS C:\Users\Lucas\Desktop\Python>
    A vypisuje mi User input inst supported
    Ďakujem Vám za odpoveď , fakt si s tým neviem dať rady a nechápem , kde nastala chyba , postupoval som len podľa vášho tutoriálu .

    •  3 роки тому

      Hm nerozumiem preco sa ro deje … uistite sa ze najprv kod napisete vo vscode potom v subore kliknete pravym a date run file in terminal

  • @SamuelGulas-qg9ul
    @SamuelGulas-qg9ul 2 роки тому

    Dá sa dekorovať premenná? Príklad ten istý ako máš vo videu funkciu sleeper a dekorátor duration_checker. a = sleeper() , b = sleeper() ale chcem odekorovať iba b

  • @lukaslacok9041
    @lukaslacok9041 3 роки тому

    Riešenie extra domácej úlohy:
    def repeater(num_times):
    def decorator(func):
    for repeat in range(num_times):
    func()
    return decorator
    @repeater(num_times=3)
    def showing_picture():
    print("I am showing picture")

    • @honzadancinger
      @honzadancinger Рік тому

      Ahoj. Jakto, že se toto řešení provede? Myslel jsem, že je nutné ještě zavolat fci showing_picture() a až potom se provede 🤔

    • @imirec
      @imirec Рік тому

      tento cyklus, sa spustí po definícii dekorátora, nie po volani funkcie ktora je dekorovana

  • @radoslav1993
    @radoslav1993 2 роки тому

    def repeat(num_times):
    def decorator_repeat(func):
    @functools.wraps(func)
    def wrapper(*args):
    for _ in range(num_times):
    value = func(*args)
    return value
    return wrapper
    return decorator_repeat
    @repeat(num_times=3)
    def sleeper(seconds, meno):
    time.sleep(seconds)
    print(datetime.datetime.now())
    print(f"volam sa {meno}")
    return meno
    print(sleeper(1, "fero"))
    Google mi dost pomohol, ale stale mam otazku. Co v pripade, ze parameter meno bude napr v dictionary,poli atd, kde tych mien bude viacero? Ake by bolo najrozumnejsie riesenie, pri ktorom by pri kazdom zopakovani bola pouzita ina hodnota parametra? Napr opakovanie 1 da meno fero, opakovanie 2 da meno jozo atd. Napada ma vyuzit hodnotu genererovanu v zadanom range(num_times) ako index pre iteraciu parametera. No ak existuje lepsie riesenie ,rad si necham poradit :) Vdaka.

  • @petrvavrinec9481
    @petrvavrinec9481 3 роки тому

    Teď, jak se snažím prokousat těmi dekorátory, tak mě napadá, že možná předtím se měly probrat Python Closures, protože to je asi pochopitelnější a je to takový odrazový můstek, nebo se pletu?

    •  3 роки тому

      Closures su zaujimava tema :) Dekoratory mi prisli prijatelnejsie na zaciatok :)

    • @petrvavrinec9481
      @petrvavrinec9481 3 роки тому

      @ no vida, tak jsem asi něco nepochopil v těch uzávěrech, protože mě naopak přišlo, že dekorátory jsou vlastně až důsledek možnosti využití uzávěrů, tudíž logicky že jsou jednodušší. Navíc ten dekorátor s parametrem, tam se mi právě zdálo, že využívá té vlastnosti uzávěru, že vnitřní funkce vidí argumenty z vnější funkce a ty tam navíc "zůstávají viset.

  • @ivanlazor466
    @ivanlazor466 2 роки тому

    Ahojte, pridávam riešenie domácej úlohy s vysvetlením pre porozumenie:
    def repeater(rep): #repeater - funkcia ktorá určí, koľko krát sa bude opakovať decorator
    def decorator(func): #decorator - vonkajšia funkcia, ktorá pracuje s funkciou ako celkom
    def wrapper(*args): #vnútorná funkcia wrapper, ktorá pracuje s agumentami funkcie
    for i in range (1,rep+1): #cyklus s nastaveným číslovaním od jednotky
    print(f"Budem tlacit funkciu po {i} krat") #tlačím, koľká iterácia sa bude tlačiť
    result = func(*args) #vykonanie funkcie s jej argumentami
    print(result) #tlačím výsledok
    return (f'{result} sa zopakoval {rep} krat') #vrátim výsledok a koľkokrát sa zopakoval
    return wrapper #vrátim wrapper
    return decorator #vrátim decorator
    @repeater(3) # v zátvorke je koľkokrát sa zopakuje
    def show_picture():
    return("I am showing picture ")
    print(show_picture())

  • @troSKA1984
    @troSKA1984 3 роки тому

    Super, vdaka za skvele vysvetlenie a priklady a za mna by som urcite privital aj viac takychto pokrocilejsich videi ked uz sa pytas :) ale pri tom kolko videi v roznych kurzoch si spravil tak mam co dohanat tak ci tak :)
    Za mna to bola velmi zaujimava tema ale po chvili premyslania pomerne lahko pochopitelna (dufam) :D Ak spravne chapem tak pri definovani dekoratoru je potrebne vopred vediet, ci funcia, ktoru budeme dekorovat bude mat argumenty? *args je super, ale ked som to skusal pouzit na funkciu bez argumentov tak to vyhodilo error - takze predpokladam ze tuto info na ake funkcie sa bude pouzivat treba mat vopred, pri definovani dekoratoru, pripadne zadefinovat 2 podobne dekoratory ak treba a pouzit podla situacie (ci pomocou neho definujeme funkciu s argumentom (-tami) alebo bez...
    a Pridavam aj moje riesenie dekoratoru pre x opakovani funkcie (o teme si este urcite pozriem viac lebo ma to dost zaujalo ale toto slo na prvu dobru po vypocuti si zadania bez dodatocneho studia dokumentacie / rad na nete:
    def repeater(func):
    number = int(input("How many times to call the function?"))
    def wrapper():
    for i in range(number):
    func()
    return wrapper
    @repeater
    def function_caller():
    print("function called")

  • @petrvavrinec9481
    @petrvavrinec9481 3 роки тому

    No tak asi je něco na YT špatně. Pod videem vidím, že jsou tam 4 komentáře napočítané, ale přitom pokud ty komentáře prohlížím, tak vidím jenom dva. Dva další jakoby neexistovaly. Dost možná jsou to ty dva moje, o kterých tvrdím, že se ztratily. A je jedno, jestli se dívám z PC nebo z mobilu. Tak teď vážně nevím. Třeba má YT problém s komentáři ve třetí a vyšší úrovni zanoření, nevím. Asi nebudu už raději dávat Reply na již existující odpověď :-(

  • @vandrujemesk8651
    @vandrujemesk8651 2 роки тому

    Z tejto lekcie som totalny magor. Stale ma myli ten nazov - dekorator. Pre mna dekorovat je ozdobit. :-) Casom na to pridem ako na to.

    • @ondrejkoval2446
      @ondrejkoval2446 10 місяців тому

      to som bol aj ja, ale dolezite su predosla lekcia a tak som si ich presiel dookola asi 10x a uz konecne som to asi pochopil :)