Why do not always use Python's re.findall instead of re.search
The most important reason is performance: findall needs to find all occurences, so it searches the whole string. search just searches the string until it finds a match, so provided the pattern is present it will be faster. match just checks if the beginning of the string matches the pattern, so it probably doesn't need to search the whole string (except in some edge cases).
So findall will be slower in the best case than match or search.
Additionally findall also stores all matches, so it can easily take much more memory than search or match which only store the first match (or nothing at all).
So findall is more memory expensive.
Last but not least match and search return SRE_Match objects which not only store the matched substring but also the position (and groups if you use patterns with capture groups). Thanks @kindall which posted this in the comments.
So, while you could use findall instead of match or search it can be slower, uses more memory and stores less information for the match. So I wouldn't use it as replacement for search or match except you also need to find all other occurences.
I have been learning python for some weeks. Presently I'm having some problems/questions with Python's re.findall(). 
In some books or videos they use re.search() seldom they use match(). In django documentation I read search finds the first match, and re.match finds a match at the beginning of a string.
But in all cases re.findall() would work well. So why shouldn't I use only re.findall() all the time?
As I want to get better in Python I want to understand it, therefore I asked this question.
Best regards Jonathan