What are Decorators in Python? 2MinutesPy

Поделиться
HTML-код
  • Опубликовано: 12 ноя 2024

Комментарии • 53

  • @Hoxle-87
    @Hoxle-87 8 месяцев назад +20

    This is better than gold! Clearly explained. No BS.

  • @Darkev77
    @Darkev77 8 месяцев назад +11

    Beautiful and elegant

    • @2MinutesPy
      @2MinutesPy  8 месяцев назад

      Thank you! Cheers!

  • @maxpythoneer
    @maxpythoneer 8 месяцев назад +3

    I've worked with decorators and used them in my Python programs, there are several built-in decorators also that can ease your work. Great one...

  • @sveneFX
    @sveneFX 3 месяца назад +1

    This channel is just great! No talking around, just clear and understandable knowledge in just 2 minutes. Thank you!

  • @SunsetofMana
    @SunsetofMana 8 месяцев назад +2

    Another amazingly simple, yet clear, and most impressively - concise explanation of a technical topic from this channel. Thank you and please keep making more!

    • @2MinutesPy
      @2MinutesPy  8 месяцев назад

      Glad you liked it!

  • @AcessHall
    @AcessHall 8 месяцев назад +8

    Pure gold

    • @2MinutesPy
      @2MinutesPy  8 месяцев назад

      Thanks for appreciation.

  • @robertodelgado6387
    @robertodelgado6387 3 месяца назад +3

    Wonderfully explained, well done my friend!

  • @abdalla4425
    @abdalla4425 8 месяцев назад +2

    So much easier than the docs for beginners!!

  • @juanmanuelmillansanchez8165
    @juanmanuelmillansanchez8165 7 месяцев назад +2

    I remember asking for this topic. Just wanted to thank you, got it perfectly!

  • @skbabasaba
    @skbabasaba 8 месяцев назад +2

    Great job. Keep producing the great stuff.

    • @2MinutesPy
      @2MinutesPy  8 месяцев назад +1

      Thanks, will do!

  • @sudhritiswaransinha9875
    @sudhritiswaransinha9875 4 месяца назад +3

    Please make a video on Concurrency:
    How do you achieve concurrency in Python? Please your explanation is so good !

  • @MuhammadShafi-c8n
    @MuhammadShafi-c8n Месяц назад +1

    really a good explanation every second worth

  • @rryann088
    @rryann088 2 месяца назад +1

    cool Thanks! beautifully explained

  • @dweepverma3662
    @dweepverma3662 8 месяцев назад +2

    Well explained... Keep it up

  • @FactFinders-of3mu
    @FactFinders-of3mu 3 месяца назад +1

    I have no word to thank keep it up

    • @2MinutesPy
      @2MinutesPy  3 месяца назад

      Yeah, thanks for the support

  • @ArdakHere
    @ArdakHere 2 месяца назад

    Very clean, thanks!

  • @emilmemmedsoy770
    @emilmemmedsoy770 7 месяцев назад

    Great explanation. Worth it more views

    • @2MinutesPy
      @2MinutesPy  7 месяцев назад

      Glad you think so!

  • @krzysiekkrzysiek9059
    @krzysiekkrzysiek9059 7 месяцев назад +1

    Well explained.

  • @cyberlando
    @cyberlando 8 месяцев назад +2

    I saw your response of someone asking why do you need the wrapper function. I still don’t understand why you couldn’t just place everything in the wrapper function just inside the scope of log_function(func) and return func()

    • @2MinutesPy
      @2MinutesPy  8 месяцев назад +2

      What you're tryin to say is why can't we place the code directly within the log_function. Okay let me explain
      According to you:
      def log_function(func):
      print(f"Calling function {func.__name__}")
      return func()
      @log_function
      def say_hello():
      return "Hello, world!"
      This approach is okay but in limited cases, here log_function immediately calls the func() after printing the logging message. Now in this approach, you can't call the say_hello function as this will result in an error.
      print(say_hello()) # error
      print(say_hello) # code will execute
      There's no flexibility in this code, you can't do much.
      But but but... What if your function accepts some argument, how will you pass that argument?
      You can't pass it in the log_function, you need a nested function to handle all this. That's where a funtion like wrapper needed to preserve the signature of the original function and simultanoeusly modifying the behaviour. For instance, take a look at the following example:
      def log_function(func):
      def wrapper(*args):
      print(f"Calling function {func.__name__}")
      return func(*args)
      return wrapper
      @log_function
      def say_hello(text):
      return text
      print(say_hello("Hello"))
      Here, wrapper function handles all the stuff printing logging msg and returning the func with argument.
      Now when you called the say_hello function with an argument, it is passed to the log_function and log_function hand over to wrapper function to do the stuff. After all the the modification, the log_function returns the modified function.

    • @2MinutesPy
      @2MinutesPy  8 месяцев назад +2

      I must say, that is a great question. Appreciate it.

    • @dweepverma3662
      @dweepverma3662 8 месяцев назад

      The same question I thought in my mind, but got the answer here.

    • @dweepverma3662
      @dweepverma3662 8 месяцев назад

      ​@@2MinutesPythanks for explaining this

  • @Rahul5556e
    @Rahul5556e 8 месяцев назад

    I needed that one❤

  • @DiscordHomeOffice
    @DiscordHomeOffice 8 месяцев назад +1

    Why do I need a wrapper in my decorater function? What is the principle behind the wrapper?

    • @2MinutesPy
      @2MinutesPy  8 месяцев назад +1

      The wrapper calls the original function and can modify the behaviour in some way which allows the decorator to extend the functionality of the original function without changing it's code directly.
      When you apply decorate a function, for instance,
      @log_function
      def say_hello():
      The above code is equivalent to say_hello = log_function(say_hello)
      Now this say_hello name points to the wrapper function within log_function and if you print (print(say_hello), you'll get the wrapper function reference, which means the wrapper function is needed to preserve the original function's signature while adding the extra behaviour or functionality.

  • @sllakshancc
    @sllakshancc 3 месяца назад +1

    cool

  • @emasa97
    @emasa97 Месяц назад

    hey shouldn't the numbers be 16 and 50? it looks like the order of the decorators were the other way around :/

    • @2MinutesPy
      @2MinutesPy  Месяц назад

      And could you explain how

    • @emasa97
      @emasa97 Месяц назад

      ​@@2MinutesPy First sum 2+2=4, then square 4^2=16

    • @emasa97
      @emasa97 Месяц назад

      Okay now I see the order is nested like 2:21. What you say at 2:08 was confusing for me

    • @2MinutesPy
      @2MinutesPy  Месяц назад

      @@emasa97 for the first case, 2 will be squared first, we get 4 and the it will get summed 4+4=8
      for the second case, 5 will get summed, we get 10 and then it will be squared 10**2=100
      Hence, we got 8 and 100 in the video.

  • @kwameadoko9542
    @kwameadoko9542 6 месяцев назад

    Let’s say a better way of writing helpers.

  • @DashingData66666
    @DashingData66666 2 месяца назад

    This all has been copy pasted from the chat gpt result
    great