Параметры по умолчанию - это независимая от языка функция, разработанная для помощи программистам.
Давайте рассмотрим ваш пример
def calc_tax(sales_total,tax_rate=0.04):
print(sales_total * tax_rate)
Мы можем вызвать функцию как
calc_tax(100)
(Обратите внимание, что мне даже не нужно упоминать 0,04, поскольку функция автоматически примет значение по умолчанию)
и
calc_tax(100,0.09)
Где в первом случае используется значение по умолчанию tax_rate, то есть 0,04, и вы получаете тот же ответ, что и
print(sales_total*0.04)
Теперь, если в какой-то момент вы захотите изменить это значение, скажем, на 0,09, тогда по вашему методу мы должны будем перейти к исходному коду и изменить функцию. Иногда это не совсем возможно или может быть не так просто, как в приведенном вами примере, как в случае, когда этот tax_rate используется в функции несколько раз.
Если вы на 100% уверены, что значение никогда не изменится, для таких же констант, как pi, в этом случае они не передаются в параметры функции, но в других случаях использовать параметры по умолчанию проще и эффективнее.