Decorators in Python || Python Tutorial || Learn Python Programming

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 ก.ย. 2024
  • 𝙎𝙞𝙜𝙣 𝙪𝙥 𝙛𝙤𝙧 𝙎𝙤𝙘𝙧𝙖𝙩𝙞𝙘𝙖 𝘾𝙤𝙪𝙧𝙨𝙚𝙨: www.socratica....
    𝙎𝙤𝙘𝙧𝙖𝙩𝙞𝙘𝙖 𝙋𝙮𝙩𝙝𝙤𝙣 𝙨𝙝𝙞𝙧𝙩: shop.socratica...
    Python decorators are "syntactic sugar" that makes it easy to add new features to a function or class without changing its code. To understand decorators, and to write your own, you'll learn how in Python, functions are "first class citizens" and how functions can be nested inside each other. These two features are the essential features that make decorators easy to write and super easy to use.
    𝙋𝙧𝙤𝙜𝙧𝙖𝙢𝙢𝙞𝙣𝙜 𝙥𝙡𝙖𝙮𝙡𝙞𝙨𝙩𝙨:
    Python: bit.ly/PythonSo...
    SQL: bit.ly/SQL_Socr...
    Subscribe to Socratica + bell for notifications:
    bit.ly/Socratic...
    ⧓⧓⧓⧓⧓
    We recommend:
    How to Be a Great Student
    ebook: amzn.to/2Lh3XSP
    Paperback: amzn.to/3t5jeH3
    Kindle Unlimited (read free): amzn.to/3atr8TJ
    Python Cookbook, 3rd edition
    amzn.to/3jprjX2
    ⧓⧓⧓⧓⧓
    Join this channel to get access to perks:
    / @socratica
    Support Socratica on Patreon:
    / socratica
    Python instructor: Ulka Simone Mohanty (@ulkam on Twitter)
    Written & Produced by Michael Harrison
    Edited by Megi Shuke and Michael Harrison
    #pythontutorial #decorators #coding

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

  • @Socratica
    @Socratica  ปีที่แล้ว +37

    Socratica Friends, we have a quiet little email group for Python if you'd like to receive updates. Sign up here: bit.ly/PythonGroup

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

      I am glad that she is doing more videos.

    • @TheCritic108
      @TheCritic108 ปีที่แล้ว

      Nunu chus le aa

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

      You are really good at teaching. Your videos are fun. The tongue in cheek humour("birds" & in background) is hysterical. The production quality is phenomenal. Impressive. Keep up the good work.

    • @ellupoit
      @ellupoit 3 หลายเดือนก่อน

      broken link

    • @cocoatea57
      @cocoatea57 10 วันที่ผ่านมา

      @@Socratica page doesn't open

  • @anthonymunnelly20
    @anthonymunnelly20 ปีที่แล้ว +99

    I’ve been working with Python for over ten years and I have never seen decorators explained so well or so succinctly as here. Really outstanding work. Outstanding.

    • @WaldoTheWombat
      @WaldoTheWombat 3 หลายเดือนก่อน

      I agree, though she lost me at 8:02

  • @olivierbegassat851
    @olivierbegassat851 ปีที่แล้ว +82

    This series just keeps on giving, always fun, to the point and beginner friendly. I love your work 🙂

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

      Decorators are pretty cool. I love to use em. You can even use decorators to sorta register a function with a class that defines a callable, it contains the __call__ magic method. This is how that Flask package works.

  • @ragtop63
    @ragtop63 ปีที่แล้ว +15

    I've only ever had to use a Python decorator to explicitly tag a class method as a property getter or setter. So the "less common" implementation noted in this video is my most common implementation.

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

      I think she meant actually creating new method decorators

  • @yash1152
    @yash1152 ปีที่แล้ว +8

    0:00 Motivation
    0:19 Introduction
    0:42 Syntax & Types
    1:06 Impellation
    ----------
    1:50 Functions: First Class Citizen
    2:34 Functions: Nested Definitions
    3:04 Segue
    3:29 Timer: Manual with timeit.timeit or time.perf_counter
    4:00 Timer: Wrapper Function (with *s and **s)
    5:35 Timer: Decorator Syntactic Sugar
    ----------
    6:04 Review (with *s and **s)
    6:50 functools Module
    7:02 cache Decorator
    7:52 wrapper Decorator
    8:12 Parametric Decorator
    8:35 Memoization on Fibonacci
    ----------
    10:11 Review & Conclusion
    10:40 Outro

    • @JordanWyk
      @JordanWyk 7 หลายเดือนก่อน

      Thanks bro

  • @fvazquez64
    @fvazquez64 9 หลายเดือนก่อน +5

    Love that Talking Heads "Once in a life time" reference... Thanks Socratica, you're something else...

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

      🙂where is my beatiful wife?

  • @goranjosic
    @goranjosic ปีที่แล้ว +6

    Python programming is FUN!! When I code something in javascript, I remember how much I LOVE Python - the readability of the code is INCOMPARABLY better.
    I sometimes struggle to read my javascript code from a few months ago, while with python I don't have that problem, no matter how big is the project. It's just a shame that Python is so slow, often for everything but hobby projects where speed is not important.
    Regardless, I will always love Python and he will always be a part of my hobby projects! ❤😄

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

      Some people suggest using Cython if speed is the concern, also i think Numpy is written in C such as other libraries that require fast computation. Python is generally used as a glue language where you maximize the advantages of python and only call functions written in faster languages.

  • @JozuaSijsling
    @JozuaSijsling ปีที่แล้ว +6

    I'm a seasoned programmer but never touch Python. I love this video. The underlying pattern of decorators is universal and this video does a great job explaining it.

  • @practicalbong1497
    @practicalbong1497 ปีที่แล้ว +6

    This is amazing following your content for the last 3 years Now I'm a middle level backend developer

  • @robboerman9378
    @robboerman9378 5 หลายเดือนก่อน +1

    “We still had to write throw-away code. That increases my sadness level to 2.9”. Love the super dry computer humor 😂❤

  • @philippfrogel9355
    @philippfrogel9355 2 วันที่ผ่านมา

    max level teaching, answers the right questions at the right time, and yet is entertaining on top, just wow!

  • @ow7398
    @ow7398 6 หลายเดือนก่อน +3

    I've just found your channel and love it. It's been so helpful to learn python as a beginner, and your examples are very clear and your dry humour is very enjoyable. Can you please explain what *arg and **kwarg means (or point me to a video of yours that explains it)? I've clearly missed this step in my learning process. EDIT: you explained it later in the video. serves me right for commenting midway through. Thanks!!

  • @hectorherrera4193
    @hectorherrera4193 ปีที่แล้ว +5

    Finally I understand decorators. Thanks for sharing!!

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

    I am new to Python and enjoyed the video, but I'm not quite ready for this. Looking forward to watching it again when I have a better grasp of the basics. Excited to see there are new videos being created. Thank you for your hard work Socratica team!!

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

    +12 happiness points for the Talking Heads reference.

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

    Thanks for your amazing python tutorial.
    I am not a python developer but still watch your videos for the way you deliver these.

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

    Love the recursion. Talking head quoting the talking heads. Can you recurse again?

  • @Wokoman1
    @Wokoman1 ปีที่แล้ว +7

    Once in a lifetime content 😊

  • @amoorinet..
    @amoorinet.. 5 หลายเดือนก่อน

    I am totally certain that, none of us will not find a channel on TH-cam that let them get the python programming concepts in complete way except this channel, my advice for beginner writes down each code each word had been said in this channel.
    Really, I have been fall in love this channel..❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

    • @Socratica
      @Socratica  5 หลายเดือนก่อน +1

      You are too kind, Socratica Friend!! We're so happy you've found us. 💜🦉

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

    I really love this channel. Has been a good companion for years.

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

      We're so glad you're with us, Socratica Friend!! 💜🦉

  • @cyndicorinne
    @cyndicorinne ปีที่แล้ว

    6:00 love it 💜 Best line yet: “That syntactic sugar is definitely sweet.”

  • @omarcruz6326
    @omarcruz6326 7 หลายเดือนก่อน +2

    These Socratica Python videos are great ! 👍
    Keep the excellent work 💪

    • @Socratica
      @Socratica  7 หลายเดือนก่อน +1

      You are so kind, thank you for your encouraging words!! 💜🦉

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

    Great video as always ... and it helps to be a Talking Heads fan to get the ending of the video.

  • @GarimellaProduction
    @GarimellaProduction ปีที่แล้ว +7

    This is amazing content ! Really simplifies decorators .

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

    These videos are a work of art.

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

    Thank you for the video and channel. Your hard work is appreciated. Im learning for the first time!

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

    It’s super high quality and I would recommend this to anyone

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

    I already new all this but watched it because I love this series, great ending too.

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

    This is awesome. 💜 Concise on the why and the how of decorators!

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

    Awesome! Can you give more examples of dynamic programming using the @cache decorator?

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

    Thanks for making cool python material again!

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

    I'am from india ❤❤❤ it is very interesting and helpfull

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

    3:47 > _"time.time()"_
    Do NOT use the time.time() for measuring time took in execution.
    time.time() returns current system time, which is not guaranteed to return precise time.
    *Update:* use timeit.timeit instead. it has number argument builtin to perform repetitions
    See a thu vu video
    Use time.perf_counter() or time.perf_counter_ns() instead.
    Refer the web page of "docs python library time".
    See the video "25 nooby Python habits you need to ditch" by mCoding
    at video id v as qUeud6DvOWI with time t starting 5m33s

  • @skilz8098
    @skilz8098 ปีที่แล้ว

    Pure Native Python is considered slow compared to many other languages that are compiled as opposed to being interpreted. Yet the versatility of the Python language to produce working code faster is quite valuable. When working with some code bases that run quite slow on large data sets with repetitive calculations, or in code sections that are considered critical sections or potential bottlenecks, I know that there exists a library module that can be imported to invoke the code to be precompiled kind of like other languages JIT compilers. I just don't remember the name of the import module. Just as important; demonstrating how to use vector intrinsics within Python I think the two of these would make for an excellent resource videos as they could be proven to generate even faster running code within various situations compared to many already existing commonly used library modules. Again, it's great to see that you're back with another excellent Python video and this is coming from someone who works more with C/C++ and a little bit of Assembly.

  • @Zvend
    @Zvend ปีที่แล้ว

    god i love your humor! You re the reason why i always go back to python, cause its so much fun but then have to go back to my C++ again 😅

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

    I love your informative tutorials. They are awesome ❤

  • @lxathu
    @lxathu ปีที่แล้ว

    Not the first video I've seen on this issue but the first one that clarifies the emerging questions right before they could be distractive.

  • @moeal5110
    @moeal5110 ปีที่แล้ว

    This is how I imagine Vulcan women look like and think. FYI referring to original series ❤❤❤ you are "fascinating" person. love your style

  • @Gouphster
    @Gouphster ปีที่แล้ว

    I would give more thumbs up to this video if I could. I'm so glad to see another video in this series.

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

    At 5:05 the inner returned "wrapper" should take actual param values --> e.g wrapper(x,y)

  • @basilcharleston8793
    @basilcharleston8793 15 วันที่ผ่านมา

    Fantastic presentation of the concept

  • @betterstack
    @betterstack 5 หลายเดือนก่อน

    Love the Python series 🔥If anyone’s looking for more Python tutorials, we’ve released Loguru logging, task scheduling, and more to help the community too 💪

  • @user-vb7im1jb1b
    @user-vb7im1jb1b ปีที่แล้ว

    It is great she is back! I'm looking forward to more up to date videos.

  • @LearningCalculus
    @LearningCalculus 3 หลายเดือนก่อน

    You are the best explainer.

  • @zeffdronin6422
    @zeffdronin6422 2 หลายเดือนก่อน

    hi im new to ur channel. i love this format. like its code that i can listen to while driving or sleeping. i appreciate the emphasis on explanation

    • @Socratica
      @Socratica  2 หลายเดือนก่อน

      We're so glad you've found us!! 💜🦉

  • @dalpyma8791
    @dalpyma8791 ปีที่แล้ว

    Thanks for this video. I am currently learning python (v3) and this taught me a lot.

  • @williamscaramuzzi
    @williamscaramuzzi ปีที่แล้ว

    The tone of the speech is very good, it sounds almost like GlaDOS hahahaha

  • @Trucmuch
    @Trucmuch ปีที่แล้ว

    This explanation is really once in a lifetime

  • @thefireagen
    @thefireagen ปีที่แล้ว

    Look who back! Welcome

  • @ZzZ-qd1zo
    @ZzZ-qd1zo 6 หลายเดือนก่อน

    This is a great video! This may be dumb, but why does the timer function need wrapper function nested inside of it? Can't a single function give the same results?

  • @lazadaunboxing2225
    @lazadaunboxing2225 ปีที่แล้ว

    I am very happy I found this channel! Thank you very much!

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

    Excellent job with explaining the concept and giving examples. It may be beneficial to do a video about Python Multithreading and Multiprocessing.

  • @ryuk_shinigami
    @ryuk_shinigami ปีที่แล้ว

    After a long time again on this channel. You are uploading new videos ❤

  • @serta5727
    @serta5727 ปีที่แล้ว

    This is very cool, probably how Neo learned to be the one in coding the matrix. 🤓🤖

  • @SeanBlantonPhD
    @SeanBlantonPhD ปีที่แล้ว

    i assume y'all know to use time.perf_counter or time.process_time to measure time intervals in the real world instead of time.time...the demo is better using time.time and getting 0's, I agree. Also LOVE the Talking Heads reference!!!

  • @fullstackspiderman
    @fullstackspiderman ปีที่แล้ว

    yay welcome back after years..

  • @stearin1978
    @stearin1978 ปีที่แล้ว

    11:27 - what was not clear for me: here we CALL the function timer with ( ). But according to definition of timer it RETURN wrapper (doesn't call it!). So we are writing here sort of : primer_factorization_timer = wrapper() calling the function timer returns.

  • @janaramon1232
    @janaramon1232 ปีที่แล้ว

    Please keep uploading more python videos, eg , file handling,web scrapping using beautiful soup etc.

  • @derickd6150
    @derickd6150 ปีที่แล้ว

    Hi there! I love your content and have for years. There is one thing that I have always wanted to know though, could you tell us where you got this epic shirt/dress? I really really want one!

  • @raviv5109
    @raviv5109 ปีที่แล้ว

    Missed you! As usual simply amazing !

  • @alexbalak7558
    @alexbalak7558 ปีที่แล้ว

    Always a pleasure to learn new things with you !
    Je vous aime ❤

  • @IgorKuts
    @IgorKuts 11 หลายเดือนก่อน

    This is pure gold.

  • @bastabey2652
    @bastabey2652 ปีที่แล้ว

    a very unusual and engaging presentation...thank you

  • @anc5430
    @anc5430 ปีที่แล้ว

    Great work !
    By the way, I like your VS code theme. which one is it ?

  • @EnglishRain
    @EnglishRain ปีที่แล้ว

    Please come back! We miss you!

  • @my_graphics
    @my_graphics ปีที่แล้ว

    Its amazing. Its revolutionary.

  • @EvilGenius2909
    @EvilGenius2909 ปีที่แล้ว

    Love the style of your channel it's awesome!

  • @BrianStDenis-pj1tq
    @BrianStDenis-pj1tq ปีที่แล้ว

    Love Socratica.

  • @julzbuzz7243
    @julzbuzz7243 ปีที่แล้ว

    She's back

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

    Thank you, well explained and informative!

  • @Torresmos
    @Torresmos ปีที่แล้ว

    Always good the see another video from this series.

  • @TheVVSLink
    @TheVVSLink ปีที่แล้ว

    I love your videos you are helping me through my classes!

    • @Socratica
      @Socratica  ปีที่แล้ว

      This is so great to hear!! 💜🦉

  • @darkesco
    @darkesco ปีที่แล้ว

    These videos are very entertaining!

  • @thomassaook7787
    @thomassaook7787 ปีที่แล้ว

    Is there any link for manuals about decorators?

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

    4:02 yes, exactly, and now you have the exact same problem with your decorator. You show higher order functions, which is a totally valid approach, and then you go back to where you started. The problem you have with the fibonacci function here 9:24 is also quite funny because you end up creating a new function for testing, which is what you should have done from the start, and your decorator syntax is more syntactically heavy than simply passing you fibonacci function to your timer function.
    A pragmatic person would add their timing logic to their *test* before and after they *invoke* the function being tested, not in the function body. They would also be advised to keep their test in an automated test suite. By using decorators to test functions, you make the test logic depend on the decorator, which means it cannot be automated because you need to manually instrument your function with the decorator each time you run your test.
    I understand that the purpose of this video is to teach decorators, not design principles or testing, but you could have used a different example. You have a responsibility. This is the kind of video that confuses learners and leads them astray.

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

      Interesting. That is a fair assessment.

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

      The point of the fibonacci explanation seemed to be exactly what you're saying, though? To walk the viewer through the problems to get the better solution?
      Teaching blind rote is how you get terrible software developers. Teaching how to find the problem and solve it will get us wonderful software developers.
      I'm not sure what you mean by "normal person" here, because if I were hiring a developer (I am one), I would hire the one who knew how to solve problems without having all of the information -- instead of the one who had all of the information memorized, I don't care how many of the patterns they can name from That Book.
      It's a bit condescending to speak of folks who are self-teaching in this manner. I'm not sure you meant that, as it's clear your intention is to improve the content, but in a way you're insulting the very audience who is enjoying and learning. We're not here for design principals or algorithm critique; this isn't that channel. We're here to learn basics and help others learn them as well.
      If you think of this series as helping teach people how to _learn how to program, using python as the teaching language_ and not "how to python", you might see what I mean?

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

      @@tsalVlog I think you are very generous in your interpretation of the video. The trope you are referring to is actually used to present a bad practice as an improvement. Nowhere is it said that this use of decorators shows poor separation of concerns, to the contrary, this fact is completely obscured, and the comical over-engineering of global_fibonacci is not addressed.
      I want to stress again that I know this is not a video about good design, but it is teaching a terrible approach to programming, which is to substitute good design with tools: instead of teaching that the testing logic should be moved to the testing code, you are taught a powerful way to couple the testing logic with the implementation. This is totally backwards.
      I have a difficult time in my job explaining to people that, just because they have a powerful testing library at they disposal for example, it does not mean they can butcher the architecture. I am forced to deal with the aftermath of this way of teaching.
      I am also self-taught, and you have no idea the amount of time I have wasted because of poor quality learning material. I wish I could rewind time, start over and take different decisions. Socratica obviously put a lot of effort in the production of this video, and they seem to be a reliable source, so it strikes me as odd that the issues I mentionned were overlooked.
      Teaching is not about making you aware of new information. It is about changing the structure of your brain. The problem when you learn the wrong thing is that you identify the wrong thing as the "right way", and since you want to be a good developer, you identify with this "right way" and you resist change when you are exposed to a different opinion or practice. I especially face this issue with people who just graduated, since self-taught people are usually more anxious about having holes in their training and are more humble as a result, but it can still happen.
      I am not sure I understand what you meant about hiring. I totally agree with you and it was certainly not my intention to be insulting. I apologise. You got triggered by "a normal person" and I now understand how it could have been misinterpreted. I guess I should have said "pragmatic" or something. By the way if you have suggestions for improving my original comment, I will consider them.

  • @user-td4pf6rr2t
    @user-td4pf6rr2t 2 หลายเดือนก่อน

    Like command substitution?

  • @giovannateodoro3724
    @giovannateodoro3724 ปีที่แล้ว

    This is beautiful

  • @blucenere
    @blucenere ปีที่แล้ว

    I love this series and she is great!

    • @blucenere
      @blucenere ปีที่แล้ว

      PS loved the rabbits in the background during the Fibonacci sequence

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

    Best video!

  • @AARHEAD191
    @AARHEAD191 6 หลายเดือนก่อน

    Immediate subscribe from me. Very informative, very entertaining aesthetic, and also funny.

  • @BitCloud047
    @BitCloud047 ปีที่แล้ว

    I love you and your videos!!

  • @rockNbrain
    @rockNbrain ปีที่แล้ว

    Great job as always

  • @edbaxls
    @edbaxls ปีที่แล้ว

    Another great video!!!

  • @jagadishgospat2548
    @jagadishgospat2548 ปีที่แล้ว

    Good one guys, keep em comin.

  • @murphygreen8484
    @murphygreen8484 ปีที่แล้ว

    Is perf_counter more accurate than time?

  • @dumisaniarchanjelmoyo7721
    @dumisaniarchanjelmoyo7721 ปีที่แล้ว

    Amazing 🔥🔥🔥

  • @nidhalkarchoud346
    @nidhalkarchoud346 ปีที่แล้ว

    i love you socratica lady

  • @harishpawar2546
    @harishpawar2546 ปีที่แล้ว

    awesome

  • @AliMohammedBakhietIssa
    @AliMohammedBakhietIssa ปีที่แล้ว

    Thank you.

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

    Wow 😲😲😲

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

    Looks like I'm in the wrong place
    - Interior Designer

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

      No, you're not. Python can also be used to fix image rendering, for example.

  • @joeldrennen
    @joeldrennen ปีที่แล้ว

    wait a minute howd you type the triangle symbol in there?

  • @PhysicsLK
    @PhysicsLK ปีที่แล้ว

    thank youuu

  • @lokmanturkmen8964
    @lokmanturkmen8964 ปีที่แล้ว

    which editor they are using on this video?

    • @Socratica
      @Socratica  ปีที่แล้ว

      We use Visual Studio Code in Zen Mode. 🧘‍♀️

  • @goldies6702
    @goldies6702 9 หลายเดือนก่อน +1

    It's like playing a video game

  • @internetlenta7349
    @internetlenta7349 ปีที่แล้ว

    Socrática in portuguese?

  • @xerxes8075
    @xerxes8075 4 หลายเดือนก่อน

    I saw this technic in React..

  • @aloewishus
    @aloewishus ปีที่แล้ว

    what the feature is she functioning about!?

  • @mattlast4093
    @mattlast4093 ปีที่แล้ว

    i'll stick to Delphi thanks

  • @DasIllu
    @DasIllu ปีที่แล้ว

    Ok, this here is the first time i found a tutorial that is neither trying to explain what a bit is nor is it black magic, blaming the recipient for not having read the python interpreter source code.