2015-05-15 5 views
0

Say Я получил эту функцию (очень простая функция только, чтобы получить мою точку зрения):Использование одной функции в качестве дополнительного аргумента в другой функции

def f(x): 
    if x: 
     return(True) 
    return(False) 

Теперь я хочу, чтобы использовать эту функцию в качестве опции аргумент в другой функции, например Я пытался что-то вроде этого:

def g(x, f_out = f(x)): 
    return(f_out) 

Так в основном, если я сделал g(1) вывод должен быть True, и если бы я сделал g(0) я хочу выход быть False как f(0) является False и, таким образом, является f_outFalse.

Когда я пытаюсь это сделать, f_out всегда True независимо от x. Как я могу сделать это так, что функция f действительно вызывается при получении значения f_out?

Код, на котором я фактически использую этот принцип, является, очевидно, более сложным, но это та же идея; У меня есть необязательный аргумент в некотором function1, который вызывает другой function2 с параметрами, которые уже являются параметрами в function1, например. x в моем примере. (Извините, я знаю, что это, возможно, нечеткий способ объяснить.)

ответ

3

Вы вызываете функцию f_out в декларации. Вы хотите передать саму функцию в качестве параметра, и вызвать его в g:

def g(x, f_out=f): 
    return f_out(x) 
+0

О да, это имеет смысл! Большое спасибо. – Motmot

0

f_out = f(x) попытки вызвать f() в то время, что функция объявлена ​​(которая не без глобальной x определен), а не когда его вызывается. Попробуйте вместо этого:

def g(x, f_out=f): 
    return f_out(x) 

Это вызывает f() с аргументом x и возвращает его значение из g().

+0

Спасибо, я понимаю. – Motmot

Смежные вопросы