Let's suppose we find ourselves in a situation where we have no other option than to write a lengthy if-else statement (definitely not something that would make cleaner by polimorphism).
def inevitable_long_if (n):
if n == 0:
print('Zero')
elif n == 1:
print('One')
elif n == 2:
print('Two')
else:
print('Manu-manu')
Can we re-write it so that we do not use IFs?
import collections
import functools
d = collections.defaultdict(lambda : functools.partial(print, 'Manu-manu'))
d[0] = functools.partial(print, 'Zero')
d[1] = functools.partial(print, 'One')
d[2] = functools.partial(print, 'Two')
Now, let's call some to see how it works:
d[0]() ==> Zero
d[1]() ==> One
d[2]() ==> Two
d[7]() ==> Manu-manu
The first version is 9 lines long, the second one (without imports) is 4 lines long. To me, the second version is also much more readable, but you decide.