#100DaysOfCode in Python Transcripts
Chapter: Days 34-36: Refactoring / Pythonic code
Lecture: Refactoring 1: if-elif-else horror
0:01 Alright, let's do this.
0:03 Let's look at 10 ways to make your code
0:06 more Pythonic.
0:07 Let's start with these typical
0:09 big if, elif, elif, elif,
0:13 elif constructs.
0:14 You must've seen code like this, right?
0:18 You have the typical workout scheme.
0:20 We check it Monday, elif Tuesday, Wednesday etc.
0:24 And if it's not a day we raise the ValueError.
0:28 Now this is pretty ugly
0:30 but it's also not extensible
0:32 in the sense that if want another
0:34 maybe combination of Thursday and Friday
0:37 to do something we have to add another elif.
0:40 What if we change this in using a dictionary.
0:43 So that we can just look up the key
0:45 and return a value?
0:46 I got this picture from the Code Complete Book
0:49 which is an awesome read about code quality.
0:51 So to refactor that,
0:53 let's start with defining a workouts dictionary.
0:58 And I'm just going to copy these in
1:00 because it's quite some typing.
1:06 And that gives us a workout scheme.
1:09 And note that the dates are in random order
1:12 because it's a dictionary.
1:13 By the way there's another way
1:14 to make this dictionary.
1:16 And that is to use zip two sequences.
1:19 So if I define a list of days
1:21 and a list of routines,
1:23 we can do something like
1:28 equals dict of a zip
1:31 and a zip takes one or more sequences.
1:34 So days, routines
1:36 and here you can
1:38 see we have an equal dict.
1:42 Alright, now to go back
1:44 to this refactoring example.
1:46 Now with the dictionary in place
1:48 you can see how much shorter
1:50 and nicer this function looks.
1:55 So note I can now just do a get
1:58 on the dictionary.
2:00 Looking up the day,
2:01 and it gives me the routine
2:03 or None, if today was not found.
2:06 So we can explicitly check routine is None.
2:11 And raise that ValueError,
2:13 as we've seen before.
2:19 And otherwise, just return the routine.
2:26 Let's try it.
2:34 Chest and biceps.
2:37 What about
2:41 Saturday rest
2:45 and call it on nonsense.
2:51 Yes I get a ValueError
2:52 because nonsense is not a day.
2:54 Alright, that's our first refactoring.
2:56 And let's look at counting inside a loop next.