Modern APIs with FastAPI and Python Transcripts
Chapter: Modern language foundations
Lecture: Type hints motivation
0:00 Now we have a little bit of code to start from on this one,
0:03 and that's just because there's a bunch of things that's not worth
0:06 you watching me type, but we're just going to extend it with this idea of
0:09 type hints. So over here have a program called "No Types Program".
0:12 That means it has no type hints,
0:14 no type information. None of that.
0:17 And let's look at what it does.
0:18 It's really simple. It has this running maximum of,
0:21 basically it lets you order things off of a menu, like breakfast or dinner or whatever,
0:26 and then it will figure out how much does that cost?
0:28 And it'll actually keep track of what is your most expensive meal that you've had this,
0:32 today. So this is the program that,
0:34 given a set of things from the menu,
0:36 is supposed to, does not yet,
0:37 it's supposed to add up what all the items are.
0:40 And then down here, we're gonna create some items, like we've got this item class,
0:44 item named tuple that can have a name and a price, or name and a value,
0:47 something like that. And then we're gonna create a couple of lists,
0:50 and we're gonna have it to add up that, add up the dinner item, add up
0:54 the breakfast items, and we'll see what the most expensive one was. It's fairly contrived,
0:58 but I just want to show you some of the pieces here.
1:00 So first of all, let's look at this counter.
1:03 When I just look at it, the fact that this is plural maybe tells me potentially
1:08 I could like loop over it.
1:09 I know I'm supposed to add up the prices. We'll do
1:11 "for i in itmes" do something.
1:14 What do I get? What are these items? Now
1:16 something a little bit funky is gonna happen.
1:18 I think PyCharm was going to tell me what I can do if I hit
1:21 "i.", what is available here?
1:24 Check that out. It says it has a value and it has a name,
1:27 and these come from this item.
1:29 Well how the heck did it know that? Normally it wouldn't,
1:32 but because it sees us creating only item lists and passing them over there,
1:36 it's like "ah we're pretty sure this is gonna work".
1:38 But if we happen to have not been using it,
1:41 do this. Now, I come over here and say "i." what do I
1:45 get? Nothing. Absolutely nothing.
1:47 This is all entirely useless and not relevant.
1:50 So how do I know what I can do?
1:52 How do I know I can loop over these things?
1:53 How do I know that I can work with it?
1:55 If the program can't figure out what you're passing through the entire flow or this is
1:59 a library that you've built and you hand over to somebody,
2:02 it's not being used yet, how would the editors be able to help you at
2:05 all? And how would they be certain that that's right.
2:09 Similarly, over here, we've got this max value, running
2:12 max, we want to do some kind of test.
2:14 I mean, it probably looks like this.
2:16 "If total is greater than running max, running max equals total",
2:21 however, this is gonna crash.
2:23 Why? Because you can't compare a number against none,
2:26 so I'll just say, "if not running max, or" like this.
2:30 Okay. So what is this running max supposed to be?
2:32 Should we really set it to, is this an integer? Is it a float?
2:35 I don't know. What we're gonna do is I'm gonna go ahead and just make this
2:38 work here, and then we're gonna improve it by using type annotations.
2:41 So let's go and put this back.
2:43 We could go up and look at our definition.
2:45 Oh, yeah, We have a value here.
2:47 Also be "total += i.value"
2:51 I should add up the prices.
2:53 There's our max. And then if we go and run it, alright,
2:57 give it a shot. Oh,
2:58 look at that. It works great.
2:59 Let's create some items. Dinner was $38.
3:01 Breakfast was $23. Our most expensive
3:04 meal was $38. So this is great.
3:06 The program is fine. There's nothing wrong with the program,
3:08 but looking at it and knowing what to do, well, didn't give us much help.
3:13 And if I get it wrong,
3:14 does it give me any help there?
3:16 Nope. It doesn't say" there is no other",
3:18 It just says "Fine, that'll probably work.
3:20 We really don't know what we're doing,
3:21 we can't help you". It would be nice if the editors and other tools said,
3:24 "no, no, no, there's no other, this is not gonna work.
3:26 I don't know what you're thinking,
3:27 but it's not gonna work", right? So we can add type hits to this program to fix all of these issues.