Jak tworzyć dekoratory? Zaawansowany kurs Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ม.ค. 2025

ความคิดเห็น • 42

  • @karoldudziuk9267
    @karoldudziuk9267 10 หลายเดือนก่อน +1

    Nieśmiertelny tekst "u mnie działa". Dobrze wytłumaczone 👍

  • @KacperSieradziński
    @KacperSieradziński  4 ปีที่แล้ว +4

    🐍 MOJE SZKOLENIA: dokodu.it
    💬 DISCORD: dokodu.dev/discord
    📌 LINKI: sieradzinski.pl

  • @Tatamgr
    @Tatamgr 4 ปีที่แล้ว +1

    O GIGA!
    Używałem dekoratorów skopiowanych ze stackoverflow, ale pojęcia nie miałem jak to działa! Działało więc nie ruszałem. Dzięki!

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว +1

      Też tak robiłem :D ale jak się nauczyłem jakie to fajne to pomyślałem, że i Wam pokaże ;)

  • @Mogiel666
    @Mogiel666 4 ปีที่แล้ว +3

    To już trzeba na spokojnie przemyśleć, bo dużo informacji :) Dobrze, że na końcu podał Pan przykłady użycia tego w praktyce

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว +1

      Po pierwsze - Kacper! Po drugie, trochę tak jest, temat jest ciut bardziej skomplikowany niż inne, ale to nic bo już niedługo ruszają zapisy na coś wyjątkowego.. od podstaw :)

    • @sunwire
      @sunwire 4 ปีที่แล้ว +3

      Kilka dodatkowych przykładów wspomnianych przez Kacpra (debugging, pomiar czasu wykonywania funkcji) masz tutaj gist.github.com/Zearin/2f40b7b9cfc51132851a#how-can-the-decorators-be-useful

    • @melonio1974
      @melonio1974 4 ปีที่แล้ว

      @@KacperSieradziński ciekaw jestem co to będzie to coś wyjątkowego :D

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว +2

      @@melonio1974 Będę robił to co mi wychodzi - będę się dzielił wiedzą :) Przygotowujemy z Bartkiem mega długi i rozbudowany kurs, można by go było nawet nazwać Bootcampem :) dotyczący Pythona, od podstaw do tematów takich jak ten i bardziej skomplikowanych. Więcej szczegółów za około miesiąc :)

    • @melonio1974
      @melonio1974 4 ปีที่แล้ว

      @@KacperSieradziński już się piszę na to 😃 jeśli chodzi o Ciebie i o Bartka to każdy kurs biorę w ciemno i wiem że będzie dobrze 👍😃

  • @Bartoszeg02
    @Bartoszeg02 4 ปีที่แล้ว +1

    Super filmik!
    Nie do końca rozumiem tylko jedną rzecz (17:39) -> print(reapeat(3)(hello)('Python'))
    dlaczego nie jest:
    print(reapeat(3)(hello('Python'))
    ? Bo przecież Python jest przekazywany jako name do funkcji hello?

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว

      Bo tak działają dekoratory, tzn. dekorator zwraca funkcje, która jako argument przyjmuje funkcję którą dekorujesz, ale nie jest ona wywołana. Twoje argumenty zawsze są jako ostatnie. Po prostu tak one działają :)

    • @konradnowitkiewicz5360
      @konradnowitkiewicz5360 4 ปีที่แล้ว

      Dokładnie tak jak napisał Kacper, dekoratoru po prostu tak działają, też miałem zonk przez 2-3 dni ale zakodowała mi się w końcu ta składnia.Mam tylko jedno pytanie- na jednym kursie tłumaczono mi że aby móc korzystać z dekoratorów trzeba zaimportować functools....

  • @rafiki-zs7ki
    @rafiki-zs7ki 3 ปีที่แล้ว

    Czesc, mam pytanie, można zamiast pisać dodatkowego wrappera zapisać w funkcji repeat jako argumenty (func, times) ?

    • @KacperSieradziński
      @KacperSieradziński  3 ปีที่แล้ว

      Jak najbardziej możesz stworzyć dekorator z dodatkowym parametrem. Wydawało mi się, że wspominam o tym w filmie.. Czy nie? :)

  • @sewerynziemlewski4386
    @sewerynziemlewski4386 2 ปีที่แล้ว

    Sposób przekazywania informacji ok ale przeszkadza ilość okienek na ekranie. Ja np. na bieżąco sobie piszę. Jak czasem coś przegapię to muszę albo cofać, albo zatrzymywać, bo za chwilę okno konsoli zasłoni kod.

    • @KacperSieradziński
      @KacperSieradziński  2 ปีที่แล้ว

      Dzięki Serwerynie :-) To jeden z pierwszych moich filmów. Staram się by te nowsze były lepsze 🙂

  • @GrzegorzPlichta
    @GrzegorzPlichta 4 ปีที่แล้ว

    Pytanko czy jak zapisze funkcje
    def uppercase(func):
    Return func().upper()
    To nie będzie to prostsze wyjście?
    Bo samo zagnieżdżanie funkcji rozumiem tylko nie rozumiem tej idei?
    Byłbym wdzięczny za wyjaśnienie różnicy.

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว +1

      a jakie argumenty przyjmuje Twoje func? :) Mógłbyś zrobić coś podobnego, ale nie będzie to wtedy dekoratorem tylko przekazaniem funkcji jako argument :)

    • @GrzegorzPlichta
      @GrzegorzPlichta 4 ปีที่แล้ว

      @@KacperSieradziński czyli rozumiem ze dekorator pozwala przekazać funkcje tak aby wykonała się wewnątrz dekoratora razem z wszystkimi jej argumentami?

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว +1

      @@GrzegorzPlichta dokładnie tak. W ten sposób dajesz możliwość deweloperom dodawania różnych Twoich dekoratorów wtedy kiedy potrzebują.
      A do czego mogą służyć to już zależy od Ciebie. :)

    • @GrzegorzPlichta
      @GrzegorzPlichta 4 ปีที่แล้ว

      @@KacperSieradziński super, dzięki :)
      BTW świetne filmy i dobrze wyjaśnione :)

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว +1

      @@GrzegorzPlichta bardzo dziękuję za miłe słowo. Jest jakiś temat na jaki czekasz? :)

  • @damianszczerba3458
    @damianszczerba3458 2 ปีที่แล้ว

    Dzień dobry!
    Kolega niżej o to pytał, ale ja chciałem tylko to sobie poukładać.
    To, że wywołuje się funkcje w sposób
    print(repeat(3)(hello)('Python'))
    Jest składnia dekoratora?
    Oraz jeszcze jedno:
    Dlaczego przy wywołaniu funkcji foo na początku również pisał Pan :
    uppercase(foo)()
    Skoro to była zwykła funkcja? Nie powinno być po prostu :
    uppercase(foo)?
    Pozdrawiam!
    Damian

    • @KacperSieradziński
      @KacperSieradziński  2 ปีที่แล้ว +1

      1. Tak to może być składnią dekoratora
      2. Dekorator odbiera funkcję która jest niewywołana i od razu się wywołuje. Czyli w przykładzie który dałeś(przejdźmy na Ty bardzo proszę! ) Jako argument odbieramy funkcję foo, która jest niewywołana. Dopiero będziemy ją wywoływać wewnątrz dekoratora. Natomiast od razu wywołujemy też funkcję uppercase.
      Chętnie wytłumaczę jaśniej na discordzie :-) Zapraszam!

    • @damianszczerba3458
      @damianszczerba3458 2 ปีที่แล้ว

      @@KacperSieradziński dziękuję za szybką odpowiedź!
      2 - czyli taka składnie używa się tylko do dekoratorów, jak dobrze rozumiem?
      Bardzo chętnie wejdę na discorda. 😉

    • @KacperSieradziński
      @KacperSieradziński  2 ปีที่แล้ว

      @@damianszczerba3458 Discord: dokodu.dev/discord :-)
      Nie tylko.. ogólnie gdy przekazujesz funkcję do funkcji. Mam film o programowaniu funkcyjnym, tam troszkę o tym mówię. Polecam! :)

    • @damianszczerba3458
      @damianszczerba3458 2 ปีที่แล้ว

      @@KacperSieradziński Czy to ten film? - th-cam.com/video/ZqIMdcImfXk/w-d-xo.html
      Kurde to mnie zaskoczyleś byłem przekonany, że można jednym sposobem tylko. 😅
      Super, dzięki!

    • @KacperSieradziński
      @KacperSieradziński  2 ปีที่แล้ว

      @@damianszczerba3458 od tego co podesłałeś zacznij, a potem zobacz ten: th-cam.com/video/EXrlTGramXQ/w-d-xo.html

  • @konrad7640
    @konrad7640 2 ปีที่แล้ว

    Aby zrozumieć dekoratory w pythonie trzeba najpierw dobrze zrozumieć funkcje zagnieżdżone i przekazywanie funkcji jako parametr. Nauka programowania nie lubi pośpiechu i drogi na skróty. Poza tym video super szczególnie na fakt omówienia wszystkich przypadków przekazywania parametrów: to funkcji "dekorowanej", do wrappera i do samego dekoratora. Można do tego dodać jeszcze pojęcie funkcji zamkniętych i w 90% praktycznych zastosowań to wystarczy. Moim skromnym zdaniem.
    Dziękujemy i prosimy o więcej.
    p.s. A tym printem to proszę się nie przejmować. Mam to samo. W moim przypadku to nawyk z powłoki IPython'a. Do dobrego łatwo się przyzwyczaić.

  • @LeszekImielski
    @LeszekImielski 10 หลายเดือนก่อน

    możesz uzyskać oryginalną funkcję, która została udekorowana, przypisując ją do zmiennej przed użyciem dekoratora )) .
    def decorator(func):
    def wrapper(*args, **kwargs):
    print("Wykonuje się dekorator")
    return func(*args, **kwargs)
    return wrapper
    def func(argument):
    print("Wykonuje się funkcja")
    return argument
    # Przypisanie oryginalnej funkcji do zmiennej
    original_func = func
    # Udekorowanie funkcji
    func = decorator(func)
    # Użycie oryginalnej funkcji
    original_func("Argument")

  • @kontoyoutubowe3317
    @kontoyoutubowe3317 4 ปีที่แล้ว +2

    Za poleceniem kierownika z ostatniego filmu wracam do dekoratorów.

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว +1

      Mądry wybór
      💚

    • @kontoyoutubowe3317
      @kontoyoutubowe3317 4 ปีที่แล้ว

      @@KacperSieradziński how many times moge znowu zaczynac to od nowa :I

    • @KacperSieradziński
      @KacperSieradziński  4 ปีที่แล้ว

      @@kontoyoutubowe3317 I think that you should wiele razy :)

  • @autogasafrica7135
    @autogasafrica7135 2 ปีที่แล้ว +1

    Dekoratory przypominają mi trochę callbacki w języku C. Dekoratory wyglądają na trochę prostsze do ogarnięcia. Niestety tak samo jak callbacki w C są tak samo mało czytelne i "zakręcone" dla kogoś kto poznaje dopiero ich składnię i ideę używania.
    Zrozumienie dekoratorów i nauczenie się z nich korzystać wymaga dużo, dużo ćwiczeń. Niestety dla początkujących to jest coś co może odstraszyć od pythona.

    • @KacperSieradziński
      @KacperSieradziński  2 ปีที่แล้ว

      nigdy nie programowalem w C, ale dziękuję za komentarz :-)