Python Generators

  Рет қаралды 124,844

mCoding

mCoding

Күн бұрын

Python generators are lazy sequences and pausable functions.
― mCoding with James Murphy (mcoding.io)
Source code: github.com/mCodingLLC/VideosS...
Generators as coros: peps.python.org/pep-0342/
For loops vid: • For loops are redundant
SUPPORT ME ⭐
---------------------------------------------------
Patreon: / mcoding
Paypal: www.paypal.com/donate/?hosted...
Other donations: mcoding.io/donate
Top patrons and donors: Jameson, Laura M, Dragos C, Vahnekie, Neel R, Matt R, Johan A, Casey G, John Martin, Mutual Information
BE ACTIVE IN MY COMMUNITY 😄
---------------------------------------------------
Discord: / discord
Github: github.com/mCodingLLC/
Reddit: / mcoding
Facebook: / james.mcoding
CHAPTERS
---------------------------------------------------
0:00 Intro
0:16 Defining generators
1:55 Iterators and Range
3:49 File processing
4:55 Lazy sequences and Collatz
7:19 Generator comprehensions
8:05 Generator pipelines
9:49 Advanced usage, send/throw/close
13:05 Yield from
15:12 Thanks

Пікірлер: 219
@biffenb7534
@biffenb7534 Жыл бұрын
I love the relatively monotone presentation, which helps clarity, with only a few incredibly well placed jokes sprinkled here and there. Keep it up!
@Holphana
@Holphana Жыл бұрын
Monotone? I hear many inflections. I would be offended at the implication towards my accent if I were in the KZfaqrs shoes. 😢
@biffenb7534
@biffenb7534 Жыл бұрын
@@Holphana You’re right, I just didn’t choose my words carefully enough. What I mean is that the presentation is that of a factual text, instead of creating unnecessary clutter through adding emotion or emphasis like so many other KZfaqrs do.
@Ptolemarch
@Ptolemarch Жыл бұрын
Indeed, these are vastly the best videos on coding I've found.
@RoamingAdhocrat
@RoamingAdhocrat Жыл бұрын
What's really missing is a title card with a photo of M with chin in hands looking puzzle, or head-in-hands despairing at some topic that was exhorted in many keynote talks - TDD, say
@l4luchi123
@l4luchi123 Жыл бұрын
No matter how experienced you are, in your videos there is always a new small detail you didn't know about. Love it!
@georgplaz
@georgplaz Жыл бұрын
yes! I thought "oh. I know everything about yielding.." and then.. bi-directional?! 🤯
@SwissTHX11384EB
@SwissTHX11384EB Жыл бұрын
Mate, I have years of Python experience, yet everytime you release a video I am floored by some of the stuff you showcase and I feel like I'm learning about the language for the first time. Stellar job, as always, and your presentation style is excellent for the job.
@luiz8755
@luiz8755 9 ай бұрын
same it's a little bit overwhelming lol
@GlutesEnjoyer
@GlutesEnjoyer Жыл бұрын
“Even if a file is gigabytes large you’ll only need enough memory to handle a single line” great point!
@ssholum
@ssholum Жыл бұрын
Async (vs threading vs "other kinda-multitasking methods") video would be greatly appreciated. It's not the most useful stuff for your average script or simple program, so I rarely see good explanations of it for any language.
@adsfwef1331
@adsfwef1331 Жыл бұрын
Dude, you are a genius. I wonder why your vids aren't getting more views than those other millions of python hacks out there. Keep up the good work.
@dhravya
@dhravya Жыл бұрын
Always struggled with generators. Thanks for the amazing explanation!
@Fikerus2
@Fikerus2 Жыл бұрын
I write things like "sum(x for x in range(10))" very often and I didn't know that was generator comprehension! I was thinking it was the same as writing "sum([x for x in range(10)])" (with brackets). Thanks a lot for your content!
@yazanalhariri3700
@yazanalhariri3700 Жыл бұрын
Me too!
@enkryp
@enkryp Жыл бұрын
Why using a comprehension at all? Can't we just do sum(range(10)) ?
@MrRyanroberson1
@MrRyanroberson1 Жыл бұрын
@@enkryp i was just about to mention! yeah range is directly iterable
@lawrencedoliveiro9104
@lawrencedoliveiro9104 Жыл бұрын
That’s the difference between an “iterator” and an “iterable”. An “iterable” has an ‗‗iter‗‗ method, which returns an iterator when it is called. The iterator is what returns the elements of the sequence, until it is exhausted and can’t be called again. Because range() is an iterable, you can reuse a single range object to return any number of iterators over that range.
@Geza_Molnar_
@Geza_Molnar_ Жыл бұрын
@@lawrencedoliveiro9104 Yeah, your explanation helps me a lot.
@mabml
@mabml Жыл бұрын
Your async explanation would be much appreciated! :)
@LettuceAttack176
@LettuceAttack176 Жыл бұрын
I swear every time I start watching a video on this channel I think “ah here is another thing I already know in python I probably won’t learn anything new this topic is pretty straight forward” and I end the video feeling like I never knew anything about it to begin with 😂😂 keep up the great work
@Gamecrazy721
@Gamecrazy721 Жыл бұрын
Very insightful video! One other place I've seen generators used frequently is for API pagination. If, for instance, if you want to get all 100 records from an API, and the API limits your query to 10 records per call, you may not want to wait for all 10 calls. Instead you create a generator that calls the API only when you've completed working with the first page and are ready to move onto the second, etc.
@lawrencedoliveiro9104
@lawrencedoliveiro9104 Жыл бұрын
Database queries is a good example. A very common sequence is * Create a cursor object * Execute a query on the cursor * Iterate over the results returned from the cursor * Close the cursor. You can wrap all these steps up in a single generator function, which takes the query and lets you iterate over the results in a single step.
@rituchandra6325
@rituchandra6325 Жыл бұрын
"Where the only limit, is your imagination... and your download speed" - LOL I lost it here
@69k_gold
@69k_gold 8 ай бұрын
Thank you! By learning this I was able to create a toy version of the async coroutines, helped me a lot to grasp the concept of event loops
@ahmadhesham1389
@ahmadhesham1389 Жыл бұрын
This is why I like your channel: Even when I think I know a topic well, I still expect to find something new in your videos, and I always do. Keep it up!
@trag1czny
@trag1czny Жыл бұрын
craving for the async vid 🤤
@vincentperrollaz5261
@vincentperrollaz5261 Жыл бұрын
Outstanding video as always. itertools might have deserved a mention since it is very useful with generators. The jump from iterator to coroutine was a bit steep and I would personally love an async video
@MessLeadingProgramming
@MessLeadingProgramming Жыл бұрын
Great video. It was eye opening for me when I learnt about generator comprehension. I realised that I was doing something very inefficient passing list comprehensions to sum and other functions. Also worker example is amazing. Never used it this way.
@lex_darlog_fun
@lex_darlog_fun Жыл бұрын
Just as I was about to suggest a video on async, James announced it himself. 👍🏻 Can't wait to see this convoluted topic explained in mCoding simple comprehensible manner.
@pa1nk1ller14
@pa1nk1ller14 Жыл бұрын
Your videos are going into great depth mate! Im awaiting for that async vid of yours
@DebashishGhoshOfficial
@DebashishGhoshOfficial Жыл бұрын
"Thank you, next" was a nice touch.
@TylerLarson
@TylerLarson Жыл бұрын
Yep, definitely interested in an async video. Especially interested in learning the "python native" async features and components so as to detangle it from all the third-party contributed stuff.
@modest_supreme
@modest_supreme Жыл бұрын
Thank you for this! Excellent deep dives. Your videos are a great source for understanding the why/how behind functionality.
@wojasek1223
@wojasek1223 4 күн бұрын
Thank you so much for this video, and all of others. I've started reading Fluent Python a couple months ago, but that was quite hard for me to go through it. And you on your channel describe those hard for me things and I finally get them somehow. Thought I was dumb, but all i needed was to find a great lecturer. Thank you so much!
@technowey
@technowey Жыл бұрын
Thank you for another great video. I’ve been using generators for years, and still didn’t know some of this.
@andrewstribling4385
@andrewstribling4385 2 ай бұрын
Nice work! I cannot wait to start using these generator techniques!
@murphygreen8484
@murphygreen8484 Жыл бұрын
Made me realize how much I still need to learn. Great video!
@Cookie-mv2hg
@Cookie-mv2hg Жыл бұрын
Every coding courses of yours it like math classes where you start at 1+1 and a simple zone out and suddenly you're on advanced mathematics.
@jewpcabra666
@jewpcabra666 Жыл бұрын
always love the videos - would love an async video! Always learn a little tidbit from these
@vidlb
@vidlb Жыл бұрын
Thank you ! And yes for the async video
@ashishjain518
@ashishjain518 Жыл бұрын
I probably only got 20% of this video. But it was enough for me to fiddle around and learn more about generators' daily use cases to improve my performance... Great video, Mcoding 😄
@redon638
@redon638 Жыл бұрын
Thanks! I always learn something new and really impressive watching your videos. Wish you twice as much subs
@FlorianLinscheid
@FlorianLinscheid Жыл бұрын
Didn't know about generator chaining, that sounded very useful! Thanks
@mistervallus185
@mistervallus185 Жыл бұрын
literally just had to learn about generators 2 days ago for a proj. the video timing is immaculate
@MoritzWallis
@MoritzWallis Жыл бұрын
Super informative video, thank you, very interesting
@dmdeemer
@dmdeemer Жыл бұрын
Watched this video because I'm like, "I know what generators are, but I bet I'll learn something new about them." Found out that yield is an expression. Mind blown. Not disappointed. Please make the async video.
@lawrencedoliveiro9104
@lawrencedoliveiro9104 Жыл бұрын
yield became an expression in Python 2.5.
@yxh
@yxh 10 ай бұрын
I would def like a video going deeper into "yield from" generator uses, with examples
@AByteofCode
@AByteofCode Жыл бұрын
Very nice CTA at the end, hadn't noticed it before, clever :) Otherwise great video and can't wait to know how async uses generators, I've been curious about that ever since you mentioned it a while ago.
@CrYpt001
@CrYpt001 Жыл бұрын
Finally something about generators. Never quite got them
@vt2788
@vt2788 Жыл бұрын
Really advanced high value stuff! Thanks!
@mytalala
@mytalala Жыл бұрын
looking forward for async video, great job
@jullien191
@jullien191 Жыл бұрын
Muy buen video. Gracias amigo
@ren200758
@ren200758 Жыл бұрын
didn't know about the generator pipeline and was blown away by it. big hype for the async video!
@dixonstroi
@dixonstroi Жыл бұрын
I think this will really help me with lazy execution via generators. This would have really helped if . Also, 'yield from' was hard for me to get from just the docs, so thanks for summing that up tidily.
@krimsonsun10
@krimsonsun10 Жыл бұрын
ALL hail @mcoding High Priest of the Python temple!! Your explanations are succinct, and the usage examples help me so much to grasp the concepts. Thank you.
@endoflevelboss
@endoflevelboss Жыл бұрын
Looking forward to the async video 👍🥳
@mattlau04
@mattlau04 Жыл бұрын
Great video as always! And would love to see a video on async
@blacky7801
@blacky7801 Жыл бұрын
You can pass things into a generator? Wow, incredible video!
@LastTigerEyes
@LastTigerEyes Жыл бұрын
I really appreciate your videos. I always learn something new, even when I don't think I will. TIL parenthesis make generator comprehension. :)
@mayank8387
@mayank8387 Жыл бұрын
Dude you're amazing! Thanks for sharing.
@macedmondson782
@macedmondson782 Жыл бұрын
I'm really liking your videos! I would love to see an async video from you!
@StrangeArrow
@StrangeArrow Жыл бұрын
Super Content. Thanks for sharing with us 🥰🥰
@MrTyty527
@MrTyty527 Жыл бұрын
I can't wait for the async video!
@aditya95sriram
@aditya95sriram Жыл бұрын
That generator pipeline was eye-opening! I've worked with generators plenty, but still this pipeline idea escaped me
@knut-olaihelgesen3608
@knut-olaihelgesen3608 Жыл бұрын
Thank you so much. This was a very confusing topic.
@martinc.7424
@martinc.7424 Жыл бұрын
I was just told that list comprehension where faster than for loops... now it makes sense.
@PetrSzturc
@PetrSzturc Жыл бұрын
I watched quite few videos about async but I would still like your take as well. It is one of the more complicated/complex? parts of the language to grasp.
@hotmole7621
@hotmole7621 Жыл бұрын
when i started python, i was so proud of my prime number generator function
@adamstrejcovsky8257
@adamstrejcovsky8257 Жыл бұрын
when I feel on top of the world with my python knowledge, I go here to restore humility :D
@AngryArmadillo
@AngryArmadillo Жыл бұрын
Looking forward to the asyncio video!
@HonsHon
@HonsHon 3 ай бұрын
Helped me refactor some code and provide some memory savings! Thank you!
@AIRLZ6
@AIRLZ6 23 күн бұрын
damn i need to watch this video over and over again :D. Love it!
@ciCCapROSTi
@ciCCapROSTi Жыл бұрын
Good stuff, I didn't know most of the advanced stuff here.
@StephenBuergler
@StephenBuergler 9 ай бұрын
Do you think it would be a good idea for the else clause in the for/in/else loop to be the place where the generator's returned value is made available?
@greasedweasel8087
@greasedweasel8087 Жыл бұрын
Can you do a video on making __iter__ a generator vs defining a __next__? I’ve seen both in the wild, you seem preferential to the __iter__ generator, and I’ve googled to no avail. I’m mostly interested in which one is more pythonic, but I’d also like to know what you think the use cases for each are. Great videos!
@darske1
@darske1 Жыл бұрын
Plot twist: The 1 Gb file you're trying to read, has only 1 line xD Awesome video. The send method confuses me a lot every time I see it, I don't know why lol
@anibaldk
@anibaldk Жыл бұрын
You cannot see this (hopefully) but I had to give a standing ovation to this one.
@mCoding
@mCoding Жыл бұрын
I saw it!
@anibaldk
@anibaldk Жыл бұрын
@@mCoding 😱😱😱😱😱😱😱
@MichalPlichta
@MichalPlichta Жыл бұрын
Wow I thought I know almost everything about generators, but i was wrong! Well done!
@mCoding
@mCoding Жыл бұрын
There's always more to learn!
@Plann
@Plann Жыл бұрын
Same.
@varkenvarken
@varkenvarken Жыл бұрын
Would it be possible to quantify the actual memory usage of the generator pipelines shown vs list based versions? Is there some debug option or memory profiler for this? [Edit]... bit of searching later, i think scalene might be an interesting option
@qazerty
@qazerty Жыл бұрын
also memray
@BR-lx7py
@BR-lx7py Жыл бұрын
This video is definitely eye-opening. I thought that generators were just regular functions that you could re-enter, but I never comprehended how python calls them totally differently. Adding something like "if False: yield" to a regular function totally changes how it is called, despite those 2 lines of code being a noop.
@klaasvaak2575
@klaasvaak2575 Жыл бұрын
not just imagination or/and downloadspeed but also your pride deciding what you appropriate from the interwebs or what you painstakingly program yourself in most likely a less efficient methode.
@alexsere3061
@alexsere3061 2 ай бұрын
"Did you really think they would add a new keyword just to abbreviate a for loop?" This is python so yes, yes I did
@taylorbreutzmann6034
@taylorbreutzmann6034 Жыл бұрын
It’s crazy, being able to tell how intelligent another human is just behind a screen/video.
@gormster
@gormster Жыл бұрын
No, I don’t want a video on asyncio. I want a whole goddamn *series.*
@mCoding
@mCoding Жыл бұрын
Take note of how I'm methodically making videos on all the prerequisites for a deep async discussion 🙃
@khalilhadji6489
@khalilhadji6489 Жыл бұрын
@@mCoding can't wait, i am facing some issue in one of my projects and understanding how asyncio works inside out would be very helpfull
@nassehk
@nassehk Жыл бұрын
Great videos pall. Please make that async video.
@Jakub1989YTb
@Jakub1989YTb Ай бұрын
9:40 - is there a nicer way to chain the generators like this? To not repeat the "nums" etc?
@Blubberland
@Blubberland Жыл бұрын
Thumbs up. 4:27 This might be a rather be a problem of spell-checking settings than on syntax.
@cloppingemu1471
@cloppingemu1471 Жыл бұрын
Look forward to an async video
@evolagenda
@evolagenda Жыл бұрын
Fantastic
@mjdevlog
@mjdevlog Жыл бұрын
So useful, even yhough i don't understand the last half of the video. Maybe one day i will😅
@JohnFallot
@JohnFallot Жыл бұрын
Let’s go Patronssss
@dane2565
@dane2565 Жыл бұрын
Yes please and thank you
@laurentmichel4565
@laurentmichel4565 Жыл бұрын
I would enjoy a video about asyncio a lot
@morrispearl9981
@morrispearl9981 Жыл бұрын
I am a fan of generators. I use "yield from" when the function that generates the next thing happens to be recursive. For example, I have a generator that takes a list of N things, and yields each permutation of those N things, and the underlying algorithm is recursive.
@stacymaimoon4189
@stacymaimoon4189 Жыл бұрын
I was impressed. Just one observation: if you try to debug an example (I did it with example_composable()) and you want to see what happens with the data in the generator after each step, transforming the generator to a list (I am using PyCharm), you will be surprised to discover that the list (and the generator itself) is empty after the very first conversion (and all subsequent generator steps as well). The example runs in execution mode, but delivers wrong results if you debug. I have not found a suitable means to overcome this limitation, so far. Do you have any presentable idea?
@BR-lx7py
@BR-lx7py Жыл бұрын
@9:08 It's crazy that you can even have the same name for the generator comprehensions, so all of them called "nums".
@kylwatson9240
@kylwatson9240 8 күн бұрын
Now if only I was doing something complex enough to merit this new found tool in my python bag... One day
@zacharyreilly7307
@zacharyreilly7307 Жыл бұрын
Please make an async video!! I would love it if you included best practices for incorporating async into sync func/programs I find most times i need something async i want to do sync stuff too or dont know how to convert it all to async
@arthurfelipe544
@arthurfelipe544 Жыл бұрын
what is the use of the line x: float? i tried to search the use of the : in that line but didn't find anything
@con-f-use
@con-f-use Жыл бұрын
> "Do you think, they would really introduce a whole new set of keywords just to have a shortened for-loop?" Yes. The answer is "Yes, I can see the Python devs do that."
@efperel
@efperel Жыл бұрын
Yield from is great for trees and other recursive traversals
@quintencabo
@quintencabo Жыл бұрын
Finally!!!
@spaghettiking653
@spaghettiking653 Жыл бұрын
4:44 what is this _make method you call? I wasn't expecting this code to run, but it still did, even though it doesn't appear you defined the method? Is this something generated by dataclass?
@NostraDavid2
@NostraDavid2 Жыл бұрын
Note that MyDataPoint class is the type NamedTuple. I googled for "_make NamedTuple Python" and got some info on the function. Turns out that _make is part of the NamedTuple class.
@NostraDavid2
@NostraDavid2 Жыл бұрын
Also note that's its a NamedTuple and not a data class. This just means that you have different functions that you can use. So no comparison, like you do with data classes. You CAN do it, but you'll have to implement it yourself.
@spaghettiking653
@spaghettiking653 Жыл бұрын
@@NostraDavid2 I see, thanks for pointing it out. So, I'm not sure why I thought it was a dataclass, but I guess I just saw the type annotations and didn't read the top part. That makes a lott more sense, big thanks :)
@arcstur
@arcstur Жыл бұрын
I am async awaiting for the video on async!
@farpurple
@farpurple Жыл бұрын
~~I got my dose of dopamine~~ Thanks you, but i should watch more times/try in code to understand yield and yield from returns, h, im still on way to switch to rust but python is so interesting!
@yxh
@yxh 10 ай бұрын
So at 9:31, the `nums` on line 15 is really a 5th-level nested generator? And whenever sum() wants the next value in the top-level generator, the inner nested generators wind all the way down to the lowest level to read the file and parse it one row at a time?
@mCoding
@mCoding 10 ай бұрын
Yep, that's right!
@RoamingAdhocrat
@RoamingAdhocrat Жыл бұрын
What typeface is your editor using? I covet those flat-top 3s
@mCoding
@mCoding Жыл бұрын
That's the default font in PyCharm, JetBrains Mono.
@thyllmuller4524
@thyllmuller4524 Жыл бұрын
9:42 I tried that exact code and I got the "sum is inf" - any idea what might be happening? I triple checked the code, it is identical aside from the function name being different.
@angel-ig
@angel-ig Жыл бұрын
"Do you yield?" - Super Mario Movie Trailer
@abdussametturker
@abdussametturker Жыл бұрын
Awesome
@bentpen2805
@bentpen2805 7 ай бұрын
I got the prime generator joke
What's Really Happening At CERN
17:41
Cleo Abram
Рет қаралды 364 М.
Understanding Ownership in Rust
25:31
Let's Get Rusty
Рет қаралды 228 М.
Escape From Spike With Herobrine and Entity
00:27
Garri Creative
Рет қаралды 12 МЛН
He wasn't having fun 🫢 #shorts
00:13
Маджит Сулейманов
Рет қаралды 5 МЛН
Когда стал самым умным
00:13
Double Bubble
Рет қаралды 15 МЛН
#61 Python Tutorial for Beginners | Iterator
10:48
Telusko
Рет қаралды 327 М.
Meta Class in Python
3:27
GuruForSure
Рет қаралды 1,1 М.
5 Tips To Write Better Python Functions
15:59
Indently
Рет қаралды 47 М.
Intro to async Python | Writing a Web Crawler
14:23
mCoding
Рет қаралды 70 М.
AsyncIO, await, and async - Concurrency in Python
9:12
Socratica
Рет қаралды 60 М.
5 Simple Steps for Solving Any Recursive Problem
21:03
Reducible
Рет қаралды 1,1 МЛН
Alat Pengisi Batre Tapi Endingnya Malah Begini
0:14
Gian Dwi Saputro
Рет қаралды 9 МЛН
iPhone 15 в реальной жизни
20:03
HUDAKOV
Рет қаралды 587 М.
Почему iPhone ярче? #apple #iphone
0:46
Не шарю!
Рет қаралды 305 М.
Самый крепкий телефон 🤯
0:21
FATA MORGANA
Рет қаралды 4,9 МЛН