WEBVTT 1 00:00:02.250 --> 00:00:04.138 And if you looked at the Python source code 2 00:00:04.138 --> 00:00:06.472 in the past, you may have come across functions 3 00:00:06.472 --> 00:00:10.639 or methods with the parameters *args and **kwargs. 4 00:00:12.717 --> 00:00:16.936 Now usually pronounce star-args and star-star-kwargs 5 00:00:16.936 --> 00:00:20.117 or KW-args, depending on how you want to pronounce it. 6 00:00:20.117 --> 00:00:23.170 Now they look horrible, but they're actually quite simple 7 00:00:23.170 --> 00:00:24.720 once you know what they are. 8 00:00:24.720 --> 00:00:27.193 And more to the point, they're also very powerful 9 00:00:27.193 --> 00:00:28.663 and can give your functions and methods 10 00:00:28.663 --> 00:00:30.320 a lot of flexibility. 11 00:00:30.320 --> 00:00:33.392 Okay, so I don't want to mess up our jukebox programme, 12 00:00:33.392 --> 00:00:36.108 so I'm gonna create a new Python file to demonstrate this. 13 00:00:36.108 --> 00:00:38.775 We're gonna call that star_args. 14 00:00:42.279 --> 00:00:43.112 All right, let's enter some code 15 00:00:43.112 --> 00:00:44.802 and then have a look at what's going on. 16 00:00:44.802 --> 00:00:47.195 I'm gonna type print, left parentheses, 17 00:00:47.195 --> 00:00:50.631 a couple quotes, hello, then ending double-quotes, 18 00:00:50.631 --> 00:00:54.699 comma, space, and then double quotes again world, 19 00:00:54.699 --> 00:00:56.986 end double quotes and right parentheses. 20 00:00:56.986 --> 00:01:00.013 And no, you haven't ended up back at video one by mistake. 21 00:01:00.013 --> 00:01:03.877 So before I explain why we're printing hello world again, 22 00:01:03.877 --> 00:01:06.798 this isn't going to work for anyone using Python 2 23 00:01:06.798 --> 00:01:08.387 and you'll actually get an error. 24 00:01:08.387 --> 00:01:10.763 You can fix that by doing the following. 25 00:01:10.763 --> 00:01:12.201 This is if you're running Python 2. 26 00:01:12.201 --> 00:01:14.836 So from underscore underscore future, 27 00:01:14.836 --> 00:01:19.003 underscore underscore, import, print underscore function. 28 00:01:21.582 --> 00:01:24.417 Now this is a Python 3 course, so I'm not going to go 29 00:01:24.417 --> 00:01:27.500 into the great detail about Python 2, 30 00:01:28.777 --> 00:01:31.598 but I'm gonna point out things like this from time to time. 31 00:01:31.598 --> 00:01:34.557 So also useful if you have to work on Python 2 code, 32 00:01:34.557 --> 00:01:36.704 if you see that import, then you'll know 33 00:01:36.704 --> 00:01:41.049 it's making some Python 3 feature available in Python 2. 34 00:01:41.049 --> 00:01:43.813 So the underscore underscore future underscore underscore 35 00:01:43.813 --> 00:01:47.223 module was introduced in Python 2.1 36 00:01:47.223 --> 00:01:48.979 and you can find more information on that 37 00:01:48.979 --> 00:01:50.991 by Googling for Python, you guessed it, 38 00:01:50.991 --> 00:01:53.906 underscore underscore future underscore underscore. 39 00:01:53.906 --> 00:01:56.260 All right, but in this case, I'm gonna remove the import 40 00:01:56.260 --> 00:02:00.093 and that's because we're focusing on Python 3. 41 00:02:01.027 --> 00:02:02.836 So what are we doing with that load of code? 42 00:02:02.836 --> 00:02:04.623 Well, we're calling the print function 43 00:02:04.623 --> 00:02:07.196 and we're passing two strings to it. 44 00:02:07.196 --> 00:02:08.752 But we could pass more. 45 00:02:08.752 --> 00:02:11.976 And we've done that at various points in the course. 46 00:02:11.976 --> 00:02:16.616 So I can change that quite easily to hello planet 47 00:02:16.616 --> 00:02:20.033 then another comma, double quotes, earth. 48 00:02:21.197 --> 00:02:25.280 And if I run that, that still works quite nicely. 49 00:02:26.844 --> 00:02:28.836 Close that little warning down there. 50 00:02:28.836 --> 00:02:30.758 If I close down the run window 51 00:02:30.758 --> 00:02:33.999 and if I do the command click on a Mac 52 00:02:33.999 --> 00:02:36.521 but it's control on a PC, if I click on that 53 00:02:36.521 --> 00:02:40.013 and click on print and have a look. 54 00:02:40.013 --> 00:02:42.378 We can see the definitions in its source. 55 00:02:42.378 --> 00:02:45.082 Now this isn't the full source for the print function 56 00:02:45.082 --> 00:02:46.424 and that's because most of the stuff 57 00:02:46.424 --> 00:02:49.841 in builtins.py is actually written in C. 58 00:02:49.841 --> 00:02:53.445 So all we can see here is a stub showing the parameters. 59 00:02:53.445 --> 00:02:55.461 But that's enough to see that it doesn't list 60 00:02:55.461 --> 00:02:57.883 an infinite number of parameters to print. 61 00:02:57.883 --> 00:03:00.642 So instead, the first parameter, ignoring this self, 62 00:03:00.642 --> 00:03:03.557 is this *args that was talked about 63 00:03:03.557 --> 00:03:05.330 at the start of the video. 64 00:03:05.330 --> 00:03:08.422 Now that's the magic that lets a function or method 65 00:03:08.422 --> 00:03:11.316 take a variable number of arguments. 66 00:03:11.316 --> 00:03:14.545 So our three string values are wrapped up in a tuple, 67 00:03:14.545 --> 00:03:18.712 so args, or *args, is the unpacked values in that tuple. 68 00:03:19.809 --> 00:03:22.625 Args itself is a tuple, and the print function 69 00:03:22.625 --> 00:03:25.736 takes each item from the tuple and then prints it. 70 00:03:25.736 --> 00:03:27.801 Now as a result, it doesn't care how many arguments 71 00:03:27.801 --> 00:03:30.679 we provide, it just iterates over the tuple 72 00:03:30.679 --> 00:03:32.085 and prints them all. 73 00:03:32.085 --> 00:03:33.680 Now I'm not gonna point you at the relevant bit 74 00:03:33.680 --> 00:03:35.894 of the documentation for this just yet, 75 00:03:35.894 --> 00:03:37.527 because it all seems backwards. 76 00:03:37.527 --> 00:03:40.859 It states that the star operator unpacks the tuple. 77 00:03:40.859 --> 00:03:43.068 Now that's technically true, it does. 78 00:03:43.068 --> 00:03:45.167 And we'll actually see it doing that in a minute. 79 00:03:45.167 --> 00:03:48.827 But unfortunately, it offers that as the only explanation 80 00:03:48.827 --> 00:03:50.676 of how this works. 81 00:03:50.676 --> 00:03:53.104 So you end up thinking, hang on, I didn't pass a tuple, 82 00:03:53.104 --> 00:03:55.810 so how can star be unpacking it? 83 00:03:55.810 --> 00:03:58.337 A good way to work out how a lot of things 84 00:03:58.337 --> 00:04:00.717 in Python behaves is to experiment. 85 00:04:00.717 --> 00:04:02.354 So let's go back to our code. 86 00:04:02.354 --> 00:04:04.792 I'm gonna close down the builtins.py. 87 00:04:04.792 --> 00:04:06.214 And we're gonna create our own function 88 00:04:06.214 --> 00:04:08.556 that takes a variable number of arguments 89 00:04:08.556 --> 00:04:10.521 just to see how this works. 90 00:04:10.521 --> 00:04:12.682 Now I'm gonna keep the function really simple 91 00:04:12.682 --> 00:04:15.777 so that we can focus on the arguments. 92 00:04:15.777 --> 00:04:17.397 So we're just gonna calculate the average 93 00:04:17.397 --> 00:04:19.033 of a series of numbers. 94 00:04:19.033 --> 00:04:21.507 Now by average, I'm referring to the arithmetic mean, 95 00:04:21.507 --> 00:04:23.600 where you add up all the values and then divide by 96 00:04:23.600 --> 00:04:25.123 how many there are. 97 00:04:25.123 --> 00:04:27.445 So let's delete that first line. 98 00:04:27.445 --> 00:04:31.000 I'm gonna start with def space average 99 00:04:31.000 --> 00:04:33.333 parentheses, then the *args. 100 00:04:34.235 --> 00:04:37.436 Closing parentheses and colon. 101 00:04:37.436 --> 00:04:38.853 Mean equals zero. 102 00:04:39.699 --> 00:04:43.282 For arg in args colon mean plus equals arg. 103 00:04:47.940 --> 00:04:52.107 Then we're going to return mean divided by len args. 104 00:04:55.237 --> 00:04:56.917 Now obviously a very simple function. 105 00:04:56.917 --> 00:04:59.728 So let's see it calculate an average. 106 00:04:59.728 --> 00:05:02.174 So we're going to add the code to call it, 107 00:05:02.174 --> 00:05:05.740 so I print average and we're going to pass the numbers 108 00:05:05.740 --> 00:05:09.393 one space two space three space four, 109 00:05:09.393 --> 00:05:11.946 obviously end parentheses as well. 110 00:05:11.946 --> 00:05:16.113 So if we run that, over here we get the value 2.5. 111 00:05:18.051 --> 00:05:20.719 And incidentally, if you're using Python 2, 112 00:05:20.719 --> 00:05:23.617 you'll get the answer two, and that's because using 113 00:05:23.617 --> 00:05:28.491 the slash here in Python 2 performs integer division. 114 00:05:28.491 --> 00:05:30.386 And in Python 2 to correct that, you would actually 115 00:05:30.386 --> 00:05:34.553 come up and type in from underscore underscore future 116 00:05:37.017 --> 00:05:40.680 underscore underscore import division. 117 00:05:40.680 --> 00:05:42.938 That would actually fix it. 118 00:05:42.938 --> 00:05:44.449 That basically makes the slash behave 119 00:05:44.449 --> 00:05:47.502 in the same way as it does in Python 3. 120 00:05:47.502 --> 00:05:48.801 But I'm not gonna do that here obviously, 121 00:05:48.801 --> 00:05:52.715 because we're basically focusing on Python 3. 122 00:05:52.715 --> 00:05:54.847 And again, if you're using Python 2.1 or above, 123 00:05:54.847 --> 00:05:56.697 but not version 3, you'll need to leave 124 00:05:56.697 --> 00:05:58.733 that line in that I've just deleted. 125 00:05:58.733 --> 00:06:00.258 If you're maintaining Python 2 code, 126 00:06:00.258 --> 00:06:03.132 insert that import, you'll now know what it does. 127 00:06:03.132 --> 00:06:06.292 All right, so in getting back to our average function, 128 00:06:06.292 --> 00:06:08.099 let's add some diagnostic prints so that 129 00:06:08.099 --> 00:06:10.416 we can actually see what's going on. 130 00:06:10.416 --> 00:06:13.150 I'm gonna start by the line immediately 131 00:06:13.150 --> 00:06:14.601 after the definition. 132 00:06:14.601 --> 00:06:18.768 I'm gonna type print parentheses type parentheses args, 133 00:06:20.458 --> 00:06:21.800 closing parentheses. 134 00:06:21.800 --> 00:06:25.001 I'm gonna do print, parentheses, double quote, 135 00:06:25.001 --> 00:06:27.834 args is left and right curly brace 136 00:06:29.669 --> 00:06:33.836 colon double quote dot format args in parentheses, 137 00:06:35.332 --> 00:06:36.825 closing parentheses. 138 00:06:36.825 --> 00:06:39.992 And print *args double quotes is colon 139 00:06:43.083 --> 00:06:47.250 double quote comma then *args, then right parentheses. 140 00:06:48.139 --> 00:06:51.874 So let's actually run that and see what answer we get. 141 00:06:51.874 --> 00:06:54.595 So we can see that the top of args is a tuple. 142 00:06:54.595 --> 00:06:58.251 And printing the args results in the typical output we get 143 00:06:58.251 --> 00:07:00.000 when we print a tuple. 144 00:07:00.000 --> 00:07:02.293 The print function encloses it in parentheses, 145 00:07:02.293 --> 00:07:04.636 as you can see here, so we've got args 146 00:07:04.636 --> 00:07:06.689 is one, two, three, four. 147 00:07:06.689 --> 00:07:10.226 And printing *args gives the four separate values 148 00:07:10.226 --> 00:07:12.349 one, two, three, and four. 149 00:07:12.349 --> 00:07:15.404 So you can see that the star operator, the asterisk, 150 00:07:15.404 --> 00:07:19.207 has unpacked the args tuple on line four 151 00:07:19.207 --> 00:07:22.443 when we printed that out or using the star here. 152 00:07:22.443 --> 00:07:24.785 But we didn't pass in a tuple, 153 00:07:24.785 --> 00:07:27.378 we provided four separate values. 154 00:07:27.378 --> 00:07:30.646 So *args in the functions parameters up here, 155 00:07:30.646 --> 00:07:34.650 on line one, that represents the unpacked tuple, 156 00:07:34.650 --> 00:07:38.821 which means that args without the star is the tuple. 157 00:07:38.821 --> 00:07:41.657 So that is to say that the *args parameter 158 00:07:41.657 --> 00:07:44.527 is telling Python to expect an unpacked tuple 159 00:07:44.527 --> 00:07:46.740 and the values we provide will be packed 160 00:07:46.740 --> 00:07:49.549 into the parameter called args. 161 00:07:49.549 --> 00:07:51.306 And just to show that, if we actually remove 162 00:07:51.306 --> 00:07:52.806 the asterisk here. 163 00:07:55.243 --> 00:07:58.076 And run, we actually get an error. 164 00:08:00.505 --> 00:08:02.392 Positional argument but four were given. 165 00:08:02.392 --> 00:08:06.314 Sorry, takes one positional argument, but four were given. 166 00:08:06.314 --> 00:08:09.576 So if we don't specify that the parameter is *args, 167 00:08:09.576 --> 00:08:11.256 what we're doing is we're forcing anything 168 00:08:11.256 --> 00:08:14.711 that caused the function to put the values in parentheses 169 00:08:14.711 --> 00:08:18.257 to pass them all as a single tuple value. 170 00:08:18.257 --> 00:08:21.739 So we could do that, we could change our line 10 here 171 00:08:21.739 --> 00:08:23.423 and put another set of parentheses 172 00:08:23.423 --> 00:08:25.590 around those four numbers. 173 00:08:27.174 --> 00:08:32.110 If we run that, you can see we get it working again. 174 00:08:32.110 --> 00:08:35.794 And notice that the printout from line four 175 00:08:35.794 --> 00:08:39.232 has successfully unpacked our args tuple. 176 00:08:39.232 --> 00:08:41.790 So it's true to say that star or the asterisk 177 00:08:41.790 --> 00:08:44.734 unpacks a tuple, but that's not what it's doing 178 00:08:44.734 --> 00:08:46.740 when it appears as a parameter. 179 00:08:46.740 --> 00:08:48.888 In that case, it's used to represent the fact 180 00:08:48.888 --> 00:08:51.316 that the arguments will be an unpacked tuple, 181 00:08:51.316 --> 00:08:54.960 so they'll be packed into the args parameter. 182 00:08:54.960 --> 00:08:57.228 So there are a couple of things to note about this. 183 00:08:57.228 --> 00:08:59.143 The first is the name args. 184 00:08:59.143 --> 00:09:00.763 Now you can use any name you want, 185 00:09:00.763 --> 00:09:02.683 as long as obviously it's a valid path 186 00:09:02.683 --> 00:09:04.435 and variable name, of course. 187 00:09:04.435 --> 00:09:07.085 The convention now is to call it args, 188 00:09:07.085 --> 00:09:09.346 which is an abbreviation for arguments. 189 00:09:09.346 --> 00:09:11.078 Now unless you've got a very good reason, 190 00:09:11.078 --> 00:09:12.857 and frankly I can't think of one, 191 00:09:12.857 --> 00:09:14.452 then stick to the convention. 192 00:09:14.452 --> 00:09:16.115 And that's because it makes it much easier 193 00:09:16.115 --> 00:09:18.811 for other people to read your code. 194 00:09:18.811 --> 00:09:22.336 The second is that a variadic parameter, 195 00:09:22.336 --> 00:09:24.138 as the documentation calls this, 196 00:09:24.138 --> 00:09:27.555 must appear after all other positional parameters. 197 00:09:27.555 --> 00:09:31.092 So it basically scoops up the remaining positional arguments 198 00:09:31.092 --> 00:09:32.822 to quote the documentation. 199 00:09:32.822 --> 00:09:34.476 So in other words, you can't do something like this, 200 00:09:34.476 --> 00:09:35.703 this wouldn't work. 201 00:09:35.703 --> 00:09:39.156 So we couldn't change this to put first underscore value 202 00:09:39.156 --> 00:09:42.489 comma and space and then our *args again 203 00:09:43.392 --> 00:09:46.261 comma last underscore value. 204 00:09:46.261 --> 00:09:47.928 The first argument in that case would go 205 00:09:47.928 --> 00:09:50.344 to first underscore value, but then all 206 00:09:50.344 --> 00:09:51.902 the remaining positional arguments 207 00:09:51.902 --> 00:09:54.376 will end up in args, which leaves no way 208 00:09:54.376 --> 00:09:56.858 to provide a value for the last underscore value 209 00:09:56.858 --> 00:09:59.978 without using a named keyword parameter. 210 00:09:59.978 --> 00:10:01.395 So if we try that 211 00:10:04.349 --> 00:10:08.516 we get an error and then even if I fix the code on line 10 212 00:10:09.754 --> 00:10:13.087 and run it again, we still get an error. 213 00:10:16.553 --> 00:10:19.246 Missing one required keyword-only argument, 214 00:10:19.246 --> 00:10:21.556 last underscore value. 215 00:10:21.556 --> 00:10:23.889 I might just move this down, 216 00:10:25.497 --> 00:10:27.675 so I can read these errors a little bit easier. 217 00:10:27.675 --> 00:10:29.115 Okay. 218 00:10:29.115 --> 00:10:31.915 So if anything does follow the args, the *args, 219 00:10:31.915 --> 00:10:34.880 it has to be a set of keyword parameters. 220 00:10:34.880 --> 00:10:38.376 And we're gonna look at those in the next video, actually. 221 00:10:38.376 --> 00:10:39.373 Right, so I'm gonna finish this video 222 00:10:39.373 --> 00:10:40.770 with a short challenge. 223 00:10:40.770 --> 00:10:42.937 Let's have a look at that. 224 00:10:48.768 --> 00:10:51.090 All right, so the challenge is to write a function 225 00:10:51.090 --> 00:10:55.095 called build_tuple, that takes a variable number 226 00:10:55.095 --> 00:10:58.111 of arguments, and returns a tuple containing 227 00:10:58.111 --> 00:11:00.249 the values passed to it. 228 00:11:00.249 --> 00:11:02.266 Now the image below shows some sample input 229 00:11:02.266 --> 00:11:05.711 to the function and also the expected output. 230 00:11:05.711 --> 00:11:08.238 So pause the video if you wanna see what that is. 231 00:11:08.238 --> 00:11:12.964 Actually, I'll show it on the next slide anyway. 232 00:11:12.964 --> 00:11:15.479 Now the function itself isn't particularly useful. 233 00:11:15.479 --> 00:11:18.040 The aim here is to test your understanding 234 00:11:18.040 --> 00:11:20.261 of what we've just done, not to produce something 235 00:11:20.261 --> 00:11:22.414 that you're likely to use. 236 00:11:22.414 --> 00:11:25.733 And as a hint, it will be a very short function. 237 00:11:25.733 --> 00:11:26.917 All right, so that's your challenge. 238 00:11:26.917 --> 00:11:28.520 See how you go, pause the video, 239 00:11:28.520 --> 00:11:31.545 and I'll see you when you get back. 240 00:11:31.545 --> 00:11:33.122 All right, so how did you get on? 241 00:11:33.122 --> 00:11:34.737 Did you manage to get it to work? 242 00:11:34.737 --> 00:11:36.484 Well, let's actually have a go at doing that. 243 00:11:36.484 --> 00:11:40.651 I'm going to delete our code in this stars_args.py file. 244 00:11:43.494 --> 00:11:46.962 And we'll start with def space build 245 00:11:46.962 --> 00:11:49.379 underscore tuple *args colon. 246 00:11:53.748 --> 00:11:56.415 Then I'm just gonna return args. 247 00:11:57.710 --> 00:11:59.212 That's actually it. 248 00:11:59.212 --> 00:12:01.615 That's because when you provide a variable list 249 00:12:01.615 --> 00:12:04.844 of arguments to a function, they're packed into a tuple, 250 00:12:04.844 --> 00:12:06.495 so this function is probably the shortest one 251 00:12:06.495 --> 00:12:07.753 you're ever gonna write. 252 00:12:07.753 --> 00:12:09.705 All we have to do is literally return args, 253 00:12:09.705 --> 00:12:11.705 sorry without the colon. 254 00:12:12.640 --> 00:12:13.473 So that's it. 255 00:12:13.473 --> 00:12:15.479 If you managed to solve the challenge, well done. 256 00:12:15.479 --> 00:12:18.183 And if you're not sure how this function works, 257 00:12:18.183 --> 00:12:20.729 it's probably worth rewatching this video. 258 00:12:20.729 --> 00:12:23.309 But to what I'm going to do is just put 259 00:12:23.309 --> 00:12:24.862 some code in here, just so we can test it 260 00:12:24.862 --> 00:12:26.653 as I mentioned in the video. 261 00:12:26.653 --> 00:12:29.706 And what I'm gonna do is just copy that code in, 262 00:12:29.706 --> 00:12:31.706 save a bit of time here. 263 00:12:33.031 --> 00:12:36.408 Just to confirm that it does actually work, like so. 264 00:12:36.408 --> 00:12:40.506 So again, now if we run this, you can see 265 00:12:40.506 --> 00:12:43.792 that we've got the expected output down below. 266 00:12:43.792 --> 00:12:46.400 So again, if you're not sure how this function works, 267 00:12:46.400 --> 00:12:49.062 it's definitely worth reviewing this video again 268 00:12:49.062 --> 00:12:51.145 and trying to write some other functions 269 00:12:51.145 --> 00:12:53.620 that also take variable number of arguments 270 00:12:53.620 --> 00:12:56.537 and just to test your theories out. 271 00:12:57.613 --> 00:13:00.508 Now examples you might wanna try here is 272 00:13:00.508 --> 00:13:03.577 firstly, a function that takes a variable number of words, 273 00:13:03.577 --> 00:13:05.989 then returns the average word length, 274 00:13:05.989 --> 00:13:07.825 a function that returns the smallest or largest 275 00:13:07.825 --> 00:13:10.535 of the numbers passed to it, a function to print 276 00:13:10.535 --> 00:13:13.966 all the words passed to it backwards in reverse order, 277 00:13:13.966 --> 00:13:17.186 so the output will read correctly from right to left. 278 00:13:17.186 --> 00:13:19.866 And a hint for that one is, we saw how to reverse a string 279 00:13:19.866 --> 00:13:23.091 using a slice of left to right square brackets, 280 00:13:23.091 --> 00:13:25.833 two colons, negative one, and that can also 281 00:13:25.833 --> 00:13:27.594 have a use with tuples. 282 00:13:27.594 --> 00:13:31.117 Another example, create a list, let's say you call it words. 283 00:13:31.117 --> 00:13:33.633 Then print the list, but also print *words 284 00:13:33.633 --> 00:13:37.481 to see that star can also be used to unpack a list 285 00:13:37.481 --> 00:13:39.064 as well as a tuple. 286 00:13:42.461 --> 00:13:44.652 The documentation for all of this is on the link 287 00:13:44.652 --> 00:13:48.325 listed on the screen and it's also in the resources section. 288 00:13:48.325 --> 00:13:50.376 It's worth reviewing that section down to, 289 00:13:50.376 --> 00:13:54.670 but not including, 4.7.5 Lambda Expressions. 290 00:13:54.670 --> 00:13:56.218 And you'll also find an image showing 291 00:13:56.218 --> 00:13:59.334 my version of those functions in the resources section 292 00:13:59.334 --> 00:14:02.767 for this video, just to help you out. 293 00:14:02.767 --> 00:14:05.621 So I won't show those images here. 294 00:14:05.621 --> 00:14:07.109 I'll leave that for you to check out 295 00:14:07.109 --> 00:14:08.594 so that you've got a chance to attempt 296 00:14:08.594 --> 00:14:10.181 those functions first. 297 00:14:10.181 --> 00:14:13.066 So see how you go with that, and if you do get stuck, 298 00:14:13.066 --> 00:14:15.717 or you wanna confirm your answers, check out the image 299 00:14:15.717 --> 00:14:17.651 that again is available in the resources section 300 00:14:17.651 --> 00:14:19.080 for this video. 301 00:14:19.080 --> 00:14:21.662 So with that said, I'm going to end the video here now. 302 00:14:21.662 --> 00:14:24.896 In the next video, we're gonna look at the KW-args 303 00:14:24.896 --> 00:14:27.615 or kwargs, as people like to pronounce it. 304 00:14:27.615 --> 00:14:30.560 which is also another term for keyword parameters. 305 00:14:30.560 --> 00:14:33.393 So I'll see you in the next video.