В обоих примерах кода есть синтаксические ошибки, поэтому неясно, что именно вы ищете.
Но да, вы можете передать функцию в качестве параметра другой функции. Типичными примерами являются функции обратного вызова или функции, которые вы, возможно, захотите применить в ходе другого.
Вот пример:
# print_os takes an integer and prints that many o's
def print_os(n):
print('o' * n)
# here, f is expected to be a function, any function that takes an integer
def for_multiples_of_three(xs, f):
for x in xs:
if x % 3 == 0:
f(x)
for_multiples_of_three([2, 6, 1, 9, 4, 5, 3], print_os)
Результат:
oooooo
ooooooooo
ooo
Или это:
def first_letter(s):
return s[0] if s else ''
def for_each_word(s, f):
return [f(x) for x in s.split()]
print(for_each_word('Not a very useful function', first_letter))
Результат:
['N', 'a', 'v', 'u', 'f']
Важно отметить, что функция - это просто еще одна вещь, с которой вы можете что-то делать в Python. Подобно присвоению числа, строки или другого объекта переменной, чтобы иметь возможность использовать ее позже, вы можете назначить функцию переменной и вызвать ее позже.
Ошибка в ваших примерах заключается в том, что вы добавили ()
, что означает, что Python пытается вызвать функцию и получить от них результат, а затем передает результат в следующую функцию. Это не вызов функции с функцией, это вызов функции с результатом другой функции:
def three():
return 3
def print_sum(x, y):
print(x+y)
print_sum(2, three())
Результат:
5