Python Bytes - #461 This episdoe has a typo
Episode Date: December 9, 2025Topics covered in this episode: PEP 798: Unpacking in Comprehensions Pandas 3.0.0rc0 typos A couple testing topics Extras Joke Watch on YouTube About the show Sponsored by us! Support our work t...hrough: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Michael #1: PEP 798: Unpacking in Comprehensions After careful deliberation, the Python Steering Council is pleased to accept PEP 798 – Unpacking in Comprehensions. Examples [*it for it in its] # list with the concatenation of iterables in 'its' {*it for it in its} # set with the union of iterables in 'its' {**d for d in dicts} # dict with the combination of dicts in 'dicts' (*it for it in its) # generator of the concatenation of iterables in 'its' Also: The Steering Council is happy to unanimously accept “PEP 810, Explicit lazy imports” Brian #2: Pandas 3.0.0rc0 Pandas 3.0.0 will be released soon, and we’re on Release candidate 0 Here’s What’s new in Pands 3.0.0 Dedicated string data type by default Inferred by default for string data (instead of object dtype) The str dtype can only hold strings (or missing values), in contrast to object dtype. (setitem with non string fails) The missing value sentinel is always NaN (np.nan) and follows the same missing value semantics as the other default dtypes. Copy-on-Write The result of any indexing operation (subsetting a DataFrame or Series in any way, i.e. including accessing a DataFrame column as a Series) or any method returning a new DataFrame or Series, always behaves as if it were a copy in terms of user API. As a consequence, if you want to modify an object (DataFrame or Series), the only way to do this is to directly modify that object itself. pd.col syntax can now be used in DataFrame.assign() and DataFrame.loc() You can now do this: df.assign(c = pd.col('a') + pd.col('b')) New Deprecation Policy Plus more - Michael #3: typos You’ve heard about codespell … what about typos? VSCode extension and OpenVSX extension. From Sky Kasko: Like codespell, typos checks for known misspellings instead of only allowing words from a dictionary. But typos has some extra features I really appreciate, like finding spelling mistakes inside snake_case or camelCase words. For example, if you have the line: *connecton_string = "sqlite:///my.db"* codespell won't find the misspelling, but typos will. It gave me the output: *error: `connecton` should be `connection`, `connector` ╭▸ ./main.py:1:1 │1 │ connecton_string = "sqlite:///my.db" ╰╴━━━━━━━━━* But the main advantage for me is that typos has an LSP that supports editor integrations like a VS Code extension. As far as I can tell, codespell doesn't support editor integration. (Note that the popular Code Spell Checker VS Code extension is an unrelated project that uses a traditional dictionary approach.) For more on the differences between codespell and typos, here's a comparison table I found in the typos repo: https://github.com/crate-ci/typos/blob/master/docs/comparison.md By the way, though it's not mentioned in the installation instructions, typos is published on PyPI and can be installed with uv tool install typos, for example. That said, I don't bother installing it, I just use the VS Code extension and run it as a pre-commit hook. (By the way, I'm using prek instead of pre-commit now; thanks for the tip on episode #448!) It looks like typos also publishes a GitHub action, though I haven't used it. Brian #4: A couple testing topics slowlify suggested by Brian Skinn Simulate slow, overloaded, or resource-constrained machines to reproduce CI failures and hunt flaky tests. Requires Linux with cgroups v2 Why your mock breaks later Ned Badthelder Ned’s taught us before to “Mock where the object is used, not where it’s defined.” To be more explicit, but probably more confusing to mock-newbies, “don’t mock things that get imported, mock the object in the file it got imported to.” See? That’s probably worse. Anyway, read Ned’s post. If my project myproduct has user.py that uses the system builtin open() and we want to patch it: DONT DO THIS: @patch("builtins.open") This patches open() for the whole system DO THIS: @patch("myproduct.user.open") This patches open() for just the user.py file, which is what we want Apparently this issue is common and is mucking up using coverage.py Extras Brian: The Rise and Rise of FastAPI - mini documentary “Building on Lean” chapter of LeanTDD is out The next chapter I’m working on is “Finding Waste in TDD” Notes to delete before end of show: I’m not on track for an end of year completion of the first pass, so pushing goal to 1/31/26 As requested by a reader, I’m releasing both the full-so-far versions and most-recent-chapter Michael: My Vanishing Gradient’s episode is out Django 6 is out Joke: tabloid - A minimal programming language inspired by clickbait headlines
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 461, recorded December 9th, 2025, and I am Brian Ockin.
And I am Michael Kennedy.
And this episode is sponsored by yours truly and Michael, so both of us.
Talk Python training, always some great stuff.
I'm working.
I just finished the AI, the recent AI agent course.
Oh, you did.
Yeah.
Oh, thank you.
Yeah, awesome.
Really enjoyed it.
Some great content there.
And so, but there's plenty of other stuff to do.
There's even a Pytist course there.
But if you'd like a really complete Pytest course, I'd own over to PythonTest.com.
We have a, there's the complete course there.
Thanks to Patreon supporters.
Also, there's a new book out from Michael and a book that I'm working on.
So lots of ways you can support us.
And if you don't, if you just want to support us by sending us topics, we like that
too. You can connect with us. There's a contact forum on the website on Pythonbites.fm,
or you can reach us on Blue Sky or Mastodon. And if you'd like to, if you're listening, we
love you, but we also would like you to check out our video stuff every once in a while.
Head on over to Pythonbytes.fm. slash live and you can be part of the audience or just watch
it afterwards. And finally, please subscribe to our newsletter or essentially it's occasionally
we send out little news bits, but mostly it's the show notes from the show. So we send out
after we get it all done, we send out a newsletter that has all the links so you don't have to
take notes while you're listening. Now, for our first topic, Michael. Our first topic is going to be
a tour of peps, a brand new pep in a pep that we spent a fair amount of time talking about. The first
one is PEP 798, unpacking in comprehensions. So this one is a little bit functional.
It's currently in draft stage targeting Python 315.
It's pretty minor, but I think it brings some consistency to it.
So I link to the conversation here, and the idea is, right now,
if I have a function that takes an arbitrary number of positional keywords,
you know, you would say star args, right?
Star arc, star, star, KW, args is like a pretty common theme that we see.
So if I had something that said star args,
And I wanted to push a tuple of our,
a tuple of values as those positional parameters.
I would say star tuple in the function call.
Kind of like you say star star for a dictionary
to say keyword arguments, right?
So the idea here is that that works for function calls,
but it doesn't work for comprehensions,
less comprehensions, set comprehensions, and so on,
if you have an iterable.
Right now what we have, and this is super confusing to me,
I always get the order wrong,
or at least I'm always uncertain,
of the order is I can say, you know,
basically X for X in Y, Y for Y in thing,
if I've got a set of lists or intervals
and I want to turn them into like one big list
as a comprehension.
You can basically do like a double comprehension
in one thing and I'm always like,
which one is the collection and which one is the item,
you know, like, ah.
So this kind of solves that.
It says you can just say in the corporation,
you say,
star iterable for iterable in some list of iterables.
And it makes it real simple.
Right?
So you can do that for pulled up official PEP.
You can do it for list comparisons, set comprehensions,
dictionary comprehensions.
If you have a list, if you have an iterable of dictionaries,
you can create a dictionary comprehension.
And you can do it for generators if your generator
generates iterables.
Does that make sense?
Yeah.
So that's pretty much it.
What do you think?
That's cool.
So that's not something you do now.
This is a proposal.
Is that right?
Yes, this is a draft for 315.
Okay.
And just shout out for a little bit of credit.
This is Adam Hartz and Eric Demaine for the people proposing it.
And the sponsor is Yela Jzilestra.
Sorry, if I messed that up.
I gave it my best shot, folks.
So anyway, that's my main topic here for this first one is this unpacking in
comprehensions.
We've had unpacking in other places.
into variables. We've had unpacking into function calls. We have not had them in
comprehensions. And they've honestly, this double comprehension, like double layered comprehension
thing has always been complicated. And so I'm here for it. I mean, it does add another thing to
language and everything you add to a language just makes it more complicated. But in this case,
I think it's, I think it's well worth it. Now, go ahead. Oh, I just wanted to say,
speaking of a comprehensive, or the unpacking, use the star or asterisk. But one of my favorite names
for that character is splat.
Splat.
Splat.
It's called them splatted comprehensions.
Here, hold on.
I'll just edit this and we'll fix this real quick.
I'm going to change the,
you know what, my screen is too small.
I was going to edit the text, right?
Okay, so that's all good.
Now, the next one is just a really quick follow-up
on a pep as well before we move off of focus on me.
Remember how excited you were and I was
about explicit lazy imports, as in lazy,
That, that, uh, are they going to take it out?
No.
Okay.
Dear PEP 810 authors, Barry Warsaw writes, this steering council is happy, happy, to unanimously accept PEP 810 explicit lazy imports.
Congratulations.
You now have a job to implement it.
Yeah.
The same is true for all the other alternative keywords we come up with so lazy it is.
I know.
That's anyway, a little bit of background on some of the thinking the steering council put on there.
But yeah, unanimously and happy.
Yay, good.
Yeah, that's pretty good.
So happy to see that.
And by the way, just a little shout out for the live stream folks.
I'm not Barry Warsaw and a bunch of other folks on to do a year and review three hours, two hours and 40 minutes from now on Talk Python.
So that's going to be fun.
We'll hear from Barry over there, but probably not about the pet.
All right, over to you, Ryan.
What am I talking about?
I'm going to talk about another new release or an upcoming release.
Pandas 3.0. So the Pandas 3.0.0. So 300. There's a release candidate zero. That's been out
since sometime last week. But there's, and then apparently there's going to be an official
30 released in a few weeks, that was a week ago. So maybe a couple weeks from now. Not sure.
So what do we got in here? I'm pretty excited about this, actually. We've got what's new.
There's a dedicated string data type by default. And this is just kind of great.
So if normally in things that with strings in them, they would show up as objects, but clearly they're strings.
So there's a new string type.
And it does change things a bit.
If you have any missing things, it'll be an N-A-N sentinel to say that there's nothing there.
What's great about this is if this, once you have this stir-type, D-type, or stir-D-type, you can only put strings or nans in it.
There's nothing else allowed.
So nothing weird shows up.
It's not just a generic object.
There's a lot of other implications around this.
The Stry can only hold strings in the Sentinel, of course.
The missing values are Sentinel, inferred by default for string data.
Anyway, check out the PEP 14 to get a little more information.
There is other implications around this, but I think it's a really good thing.
Copy on Write also is kind of a really exciting thing that hopefully,
nobody will really notice, but the idea is really anything that results in an indexing operation
will return essentially a copy of things.
So you don't, there's not, or not a copy, it'll be a reference.
It's, and it only, only makes a copy of actually modify something.
So, so handles will keep track of whether or not you've changed it.
And if you haven't changed it, it's just a copy of the data there.
This will say, this should save a lot of time and space.
I think that's going to save a ton of especially memory because if I remember correctly,
I'm not a hand as experts by any stretch of the imagination, but when you call operations like
filter operations or other transform operations, it doesn't in place modified. It returns a new
data frame. Like if I add a column to a data frame with the operation, I get a entire copy of that
data frame plus the column, you know, one's the new column. If you've got five million rows loaded
and you call those five or ten times.
Like, you're all of a sudden, it's piling up fast.
Yeah, and it says the main goal is to change the user API
to be more consistent and predictable.
And I think this is right, because we're,
I mean, we're doing like matrix operations and stuff,
and we'd really like it to be kind of like math
where you don't really care about the, you know,
size or timing implications.
You're just, this is what I want to do.
And having that be more consistent and hidden behind the scenes,
I think it's going to be great.
It's going to make this a lot easier to learn their cleaning
up a lot of the API and stuff.
It's really cool.
We had covered this in one of the other episodes that was coming.
PD call syntax can now be used for data,
used in data frame assign and location.
And this idea is that basically you could just say,
I want to assign a new column with the addition of like two other columns or
something or some operation.
And it just, it does it right there.
Like instead of having to do a Lambda expression inside,
you can just do the expression.
It's really kind of a great syntax.
We've got a copy of the syntax in the show notes,
but that's pretty great.
Some changes to deprecation policy,
probably because of some of these changes that,
you know,
they're doing a three-stage deprecation thing.
But I think this is good.
I think that basically open source projects are being used more.
The ones that have to think about this,
how to keep track, keep it fun to maintain,
but also moving with the times.
And I think these are good calls.
A bunch of other.
enhancements as well so check those out but i think this is a really good good direction and i can't wait to see
three oh pandas come out this will be great yeah that's pretty exciting that's a pretty major change
uh all right um what's up next this episode has typos in it brian oh no i'll try to fix it i know
well remember i spoke about code spell all one word code spell and it was a miss spelling finder
not a spell checker right the spell checker looks for words that it knows our
good and says, I don't know that word. That must be misspelled. In programming, obviously,
there's all these symbols and all sorts of stuff. One of the things that drives me crazy is
when my editor suggests that a library that I'm importing is misspelled, but it's the library's
name correctly. I'm like, well, I can't write it any other way. This is the only way it works. I'm
sorry, Spell Checker, but do I really got to go through and tell you that this is the name of the
library I'm using? Yes, apparently I do. So this light code spell, this thing called typos,
also looks for known misspellings like ADN for a common misspelling of and so on.
So why are we back?
Well, Sky Costco wrote and said,
Codespell is cool, but you should check out typos.
So typos, I believe it is written in Rust.
Yes, 99.9%.
That's 3-9s Rust, pretty good.
And 0.0% Python, but it's still mentioned.
So it must be less than 1 tenth of 1%.
But it's a little more full feature.
for people that like this. So, for example, it has a GitHub action that you could just put into all of your PRs.
That's kind of cool if you want. Is that like a gated thing for, you know, PRs and commits and so on?
But the best thing about it, I guess two things. One is it uses the concrete syntax tree rather than actually just searching text.
So what it can do is it can find partial bits of words that are misspelled.
Maybe this is actually not related that, but it does find partial misspellies.
So, for example, if you write connecton string, instead of connection string with snake casing, whatever, it says, hey, guess what?
The word connection and connection underscore string without the eye is a misspelling.
Maybe you should change, you know, connecton to connection or connector or whatever.
And it gives you a nice little UI for that.
So that's one.
I really like that.
Actually, that's super cool that it can detect misspellings within, you know, snake case words.
Yeah, yeah, this is a big improvement.
Picharm does this as well, by the way, which is really nice.
But I believe Pytarm is a built checker, not a misspelling finder or whatever.
Pretty sure.
Anyway, this is really nice that it does this.
The other thing that's super cool, and this is why SkyRot to us, is it actually has a VS code in friends, extension and language server.
So what you can do is basically install this as an extension in VS code or cursor or Google anti-gravity or, you know, when serving that you
name all the others, right? Because it's also in the open VSX registry. So you can install that
there. And then just as you're writing code, you get little squigglys and you get alt-inter
actions to fix it. So you don't even have to run the client or the GitHub thing and so on,
which the code spell has no editor integration. So it's really the fact that this is like,
like that, a little better, runs in editors. That's cool. Yeah. Actually, don't remember the last
time I actually ran a spell checker independently. I just rely on those in-editor things.
Thanks.
So do I.
So do I.
So, yeah, it's also got LSP for other things, I guess.
Probably, yeah, that means you can even use it in NeoVim or Vim or Z or whatever, right?
So it's not just even the extensions.
It's actually because the LSP, it even goes farther than that.
Cool.
Yeah.
Anyways.
Thank you, Sky, for the follow-up and good suggestion.
All right.
Apparently, I'm missing having a testing podcast.
So I've got two topics that I'd like to talk.
about a couple of testing topics.
First one came in.
It's called Slowafi.
It came in from Brian's skin.
So thank you, Brian, for sending in this idea.
So here's an interesting idea.
So this is a project to simulate overloaded,
slow resource-constrained machines.
So basically to make your tests flakier or something.
Nice flaky tests.
but the idea around it is a test is working fine in locally but you throw it up in CI and it fails for some reason so and it might be because you've got you've got a CI image that that is more constrained so this this allows you to do things like muck with how much memory is around and and how many CPUs are available and stuff it does require it requires you to run it on a Linux
machine with C Groups V2 around because that's how it throttles the CPU and memory and stuff.
But it shouldn't be hard to come by and hopefully.
And yeah, then you can check to you can muck with things to find out, you know,
to try to simulate locally a failure that's happening in CI.
So really nice there.
The other topic I'd like to talk about testing related is this comes from Ned Batchelder.
actually it's his article
why your mock breaks
later and
actually I think it should be stronger
than this basically don't
the don'ts and do's
of mocking and
the gist of it is as
overly aggressive mocks can
work fine at first but then break later
recently a lot of people
were doing all this
pop down if you've like
let's say you're reading a file and you want
you want to pat
when the file gets
open you don't really actually want to file the muck with the file you want to be
able to to mock that or patch it so one of the things that some people do is to
patch the open function and one of the ways people do it is patching built-ins
open this is not how you want to do it this is the don't do this version and I'll
just zoom in a bit don't do the built-ins open because it like patches everything
and it's causing problems in it was causing problems in coverage because
because coverage also wants to open something.
And you're basically patching open for everything in your program,
including coverage when it's running on top of it.
So you don't want to do that.
You only want to patch where you are.
So the proper way is wherever, like if you're in a,
the example is you've got a user file,
you want to patch right there in my product.
User, the dot following of where it right,
exactly where it is.
there's that's the
gist of it is is don't
don't mock the thing
you're importing after you've imported
at market there and it's a good
good lesson I didn't think that this
I thought that was fairly
fairly widely known
so I didn't realize it was an issue
he went ahead and did a search
for
Python in GitHub
you can search for
built ins open with
test in there and patches
and stuff either are their patches or whatever monkey patching or patching or mock patching
found 44,000 files that were doing the bad one within GitHub so um this is all this is all
naughty well i don't know what kind of get a GitHub badge you get for 44,000 PRs getting accepted
but dad's got himself a real opportunity here to get a one percent sort of batch. I don't think he wants
to fix them all but yeah that's an interesting way an interesting metric yeah and that's
Actually, at the end of the article, also, I'd like to point out,
he talks about some, some mocking practices.
Make sure you use autospec equals true to make sure that your mocks strictly
behave like the original.
I wholeheartedly agree with that.
Make assertions about how your mock is called.
Actually, the rest of this is stuff that I actually want to go check out,
because I do remember this functional core imperative shell talk and some of these other
things, dependence to injection.
I'm not sure if I agree with all of Ned's stuff,
but that's all right.
Some other interesting things to read about with mocking.
I imagine he knows more than I do
because I don't usually mock.
I don't mock very much.
It's not very nice to do, honestly.
It's not very nice.
Yeah, but sometimes it's necessary.
And sometimes it's necessary.
You know what is nice, though?
Extras, yeah.
Yeah, I do have extras.
Should I go ahead and run through him?
All right.
So I've already got my stuff up.
Let's go.
So this is a great, there was a great mini documentary of Fast API, the Rise and Fall,
rise and rise, not the Rise and Fall, the Rise and Rise of Fast API with Sebastian Ramirez.
And it's like an eight minute video.
It's a really fun video of him talking about it.
He's such a genuine, nice dude also.
Yeah.
Yeah, he really is.
I am still writing, Lean TDD, the eBook in progress.
you go to the table of content oh I made a couple of changes so somebody requested that not only do I when I release a new chapter to release the full thing but also the latest one and that way people can just like just throw the latest one on their Kindle and just have one chapter where they can either replace the whole thing or if they've taken notes on other stuff to just do the updates of the new chapters so I'm going to do that now or at least have started we'll see it's a little extra work but
that's all right. I got the building on Lean done, and it was long enough to talk about
lean, I think, that it made sense to split it. And I was going to do finding waste in test
driven development as part of that chapter, but I'm going to make it its own chapter now.
So I'm going to do that. I wanted to do a sneak peek. Oh, never mind of the table of contents
in progress so far. So I'm making some good progress. I've got an outline for where I'm going
in the future. Where are we now? We're going to do.
finding waste in TDD next year.
It's not going to be a huge book.
Probably, I'm guessing.
So right now we're up to what, what 30 pages is a PDF.
I'm guessing it will be under 100 pages when I'm done.
So it's not a huge book, but it's also not expensive.
It's $10.
At least my experiences, PDFs usually have more content per page than ebooks.
At least if you ask Amazon, how many pages is it?
Yeah, and even like way more, yeah, it's more content per page
for e-book, but also per print book.
So print book isn't usually an 8.5 by 13 page.
So, yeah.
Last one, my extra Python 3142.
It was released December 5th.
We haven't been, we haven't had 314 around for that long.
But as people are upgrading, which is great.
And they're not afraid to upgrade, but they're finding a few things.
So there were a handful of fixes.
There were some exceptions in multi-processing.
I didn't notice those, but some people noticed them.
Data classes without anits
We're throwing exceptions.
Anyway, they fixed some critical things in 314
and I appreciate the core team being on top of it.
So that's great.
Yeah, awesome.
That one flew under my radar.
Somehow I didn't notice it.
So very exciting.
It's time to upgrade some stuff.
All right.
Do you have any extras?
Well, I do.
I have some repeat extras in a sense
in that you and I both pulled this Sebastian Ramirez one out
and I don't really have much more to say
other than I want to say for sure.
This is a super nice documentary.
It's super highly produced.
It's done by Cult Repo.
What a bad name.
The comments suggest like, what is this like a weird cult or something?
A much better channel name would be repo culture, culture repository or repository or repository
it's something about like it covers open source basically, right?
But Cult repo is weird.
Anyway, it's the same group that did the one hour Python documentary that's really highly
produced.
So that's all I want to say about that.
And with regard to the book, Brian, for the Talk Python in production.
book, I actually started keeping a change log. I think we talked to, I think even you brought
this up, keep a change log. Don't let your friends dump get logs into change logs. Keep your,
keep your change long. And so I'm, I'm keeping this for people who are like, what has changed
about the book? Because at least, well, on Amazon, Amazon says they will release new versions
as they feel like it if I upload a new EPUB. And really, yeah, but it doesn't say the
timeframe of it. And those should automatically show them people's devices as updates. And then
the Gumroad version, if you buy it directly from me, obviously, I push up new versions and have
like numbers. And my book has a version number in it, right? Which is kind of fun. Anyway, so I'm
keeping a change log following the keep a change log style so people can see like, do I care?
Do I care about the change? Do I need to go back? Whatever. So. Yeah. And I also want to tell
people that it's the, it used to be like, you know, several years ago when I did a first e-book.
it was a little little sketchier to figure out how to get a book onto your Kindle without
like without going through Amazon and it's way easier now if you just like if you grab a book
like an ebook for me or from Michael you can just email it to yourself you can set up an email
address that you just email it just shows up on your Kindle yeah you your Kindle gets an email
so mine mine something with the word paper right in it I don't remember exactly what it is
Yeah, and it's totally, you've figured out once.
And I've got, yeah, it's not bad.
It's not easy.
It's not easy.
It is very easy.
It's not hard.
Yeah, yeah.
And real time follow-up, Sky, as in the same Sky that recommended typos.
It looks like 3142 came out just three days after 3.14.1.
Okay, very interesting.
All right, a couple more extras for me.
I was on Vanishing Gradients, so that I told you that's going to be there.
That's out.
That was a very fun episode.
I have fun chat with Hugo Bowen Anderson.
And Django 6 is now official release.
Last week, I talked about what was coming.
But the day after we did that, it's now actually out.
Right?
So if you're waiting on that, Django 6 is out.
See what it holds for you.
Now, Brian, I think I have a pretty fun, pretty fun joke.
This is a little more elaborate than just like a dad joke
or something.
Are you ready?
So one of the, there's like these joke programming languages
that actually compile and stuff.
And one that I really love is a lolcats, LOL cats, all one word.
So good. So good. Actually, has multiple implementations of it. And it's good. So, but we don't live
in the time of Lawcats anymore. That was like an early meme of the internet. So we now live
in a hyper-hyped, crazy headline, overdone age, as you know. So I present to you the tabloid language.
Oh, my God. Are you ready? Oh, my God. Here we go. It's a minimal programming language inspired by
click bait headlines shocking new programming language bewilders programmers at google and facebook get up new
headline tutorial so let's look at an example here discover how to fibina this is that this is import
basically discover how to no this is the function actually discover how to fibonacci with a b n
rumor this is like a try or something rumor has it what if n smaller than one shocking development
B. Lies. Rumorize it. You won't want to miss B. Shocking development. Fiminacci of B, A plus B in minus 1.
End of story. In the story. Expert claims limit to be 10. You won't want to miss. First 10 Fibonacci numbers. You won't want to miss. Apparently it's print.
And then I don't know what this last one is. Experts claim nothing to be Fibonacci of 1.01.
limit. I think that's like a test or assert. Please subscribe with like no output. I'm going to run it. Hold on. Hold on. Run this. Oh my God. It runs. What about factorial? You won't want to miss this. Hello world. Discover how to factorial within. Rumor has it. What if N is actually zero. Shocking development one. Lies. Shocking development. So good. Oh, no. Lies is the else. Yeah. Lies is else. Yeah. Lies. Because there's a there's an assertion. It was lies.
No, not the assertion.
It's really good, actually.
And notice, it runs.
It runs.
It runs in the browser.
What is this built on?
I don't know.
I'm not sure if it's WebAssembly or if it's just JavaScript implementation.
It's all JavaScript.
So.
This is awesome.
It's so good, isn't it?
Yeah.
I think we need a, but, you know, it used to be that this would be difficult,
but we just have to have the spec for this, and we could get, like,
clod or something to translate larger programs.
to tabloid.
I might rewrite Python Bites the website in it.
I think lies, exclamation, it requires an exclamation mark for lies.
Oh, by the way, people were just listening.
This is all the keywords, the entire language is all caps.
Of course.
Of course.
Anyway, I think it's pretty excellent.
This is old.
This is old.
I didn't realize.
I just ran across it, but it's four years old.
Anyway, well done.
Well done.
whoever made this. This is amazing. This is awesome. Yeah.
Oh, yeah. Also, Kiva in the audience points out that every time you print something,
it also ends in an exclamation mark, even if the text itself doesn't have an exclamation mark.
Oh, yeah, obviously. Of course. It was asked to. Lies. This is the end of the show. Lies,
we have more. No, this is really good. It's good. So also for people, uh,
Watching the video, you'll notice a little less junk in my office.
I'm starting to clean up after Thanksgiving.
We'll get there.
Yeah, anyway.
Great episode as always, Michael.
Thank you.
Thank you, everybody for listening.
And we'll see you all next week.
What if actually this was the end now?
See you later.
Lies.
Lies.
