Почему?
Сложно ответить коротко.
У генератора есть контекст - в то время как у функции (даже рекурсивной) - он только в параметрах вызова и возвращаемом значении.
И каждое новое условие добавляет аргумент, а каждый нетривиальный случай заставляет по новому обработать вернувшееся значение.
Еще один немаловажный минус - отладка. Она, конечно, для слабых духом ребят - настоящие пацаны пишут все сразу и правильно.
Проверяя работу исключительно на юниттестах.
Я сам пытаюсь делать так, и отладчики кроме pdb не использую уже примерно лет пять.
В рекурсивных алгоритмах очень нелегко представить этот самый чертов контекст. Приходится прыгать по стеку вверх и вниз. Не
люблю.
PEP 342 позволяет более интересные возможности, выходящие за рамки вопроса.
Кстати, ваша всегда работающая функция споткнется, если файл есть - а прочитать его нельзя. Это мелкое замечание.
Вдобавок БОЛЬШИМИ буквами в Питоне принято обзывать константы. А остальным именам давать более говорящее название.