Почему функция и переменная не могут одинаково называться?
Более-менее корректный ответ мог бы выглядеть так.
Большинство "слов" в коде на Python -- это имена-ссылки на объекты Python.
И функции, и "переменные" -- это объекты Python.
В любом пространстве имён могут хранится имена-ссылки как на функции, так и на "переменные".
Имена в каждом пространстве имён уникальны, поэтому нельзя одинаково назвать и функцию, и переменную. При попытке так сделать, что-то новое займёт имя-ссылку чего-то старого.
То же самое относится к классам, к объектам классов, к полям и методам классов и пр. Все объекты Python либо занимают уникальные имена в неком пространстве имён, либо не занимают вовсе (например, числа в списке доступны не по имени, а по индексу).
P.S. Спасибо, вопрос поднял настроение.
Потому что, функция - переменная хранящая значение.def add(x, y):
    return x + y
    
add = 123

print add

// 123add = 123
    
def add(x, y):
    return x + y
    
print add

// <function add at 0x7f7e688f37d0>