Потому что вам нужно вызвать функцию и передать ей аргумент: test(square(2), 2)
Но это убогий костыль, который исправляет вашу изначально неправильную написанную функцию.
Вот правильный, предложенный longclaps вариант:
def square(x):
return x * x
def test(func, y):
print(func(y))
test(square, 2)
longclaps, так изначальный код-то не я писал. Мне как-то всё-равно как, у кого и что названо и что оно вообще делает.
Мне больше 'y' мозолит глаза. Подозреваю, что это так он хотел передать нужное число в функцию square. Думаете стоило показать, как это сделать правильно?
longclaps, я придерживаюсь принципа невмешательства. Вопрос: "почему не выводится квадрат числа?" Ответ на него я дал.
Более того, у питона есть pow(), если уж на то пошло.