Когда вы передаете только имя функции (без скобок и аргументов), вы просто передаете указатель на эту функцию, но не выполняете ее. Затем вы можете вызвать этот указатель (с круглыми скобками и аргументами) и будет выполняться нормально. Смотрите пример:
def select(f):
all_data = [11, 22, 33, 44, 55, 66]
res_data = []
for data in all_data:
if f(data):
res_data.append(data)
return res_data
def filter(value):
return True if value%2 == 0 else False
print(select(filter)) # [22, 44, 66]