难以定义高阶函数来模仿if语句

时间:2016-09-23 05:36:29

标签: python if-statement higher-order-functions

我很难回答我们最近被问到的一个问题,作为Python中高阶函数练习的一部分。

问题是定义两个函数,一个不带参数,并通过if / else语句传递三个全局定义的函数c(),t()和f(),如果c()为真,返回t()否则返回f())。另一个函数是我们在c()t()f()上评估的高阶函数,然后通过相同的if / else语句传递它们。

这些函数是不同的,我们的任务是通过定义三个函数c()t()f()来看看如何使第一个函数返回1而第二个函数返回一个以外的函数

到目前为止,我已经意识到问题在于调用函数c()t()f(),然后再将它们传递给if / else语句。然而,这还不足以激发解决方案。有人能够引导我朝着正确的方向前进吗?

以下是相关代码:

def if_function(condition, true_result, false_result):

    if condition:
        return true_result
else:
    return false_result


def with_if_statement():

    if c():
        return t()
    else:
        return f()

def with_if_function():

    return if_function(c(), t(), f())

def c():
    return []

def t():
    return 1

def f():
    return 1

1 个答案:

答案 0 :(得分:0)

您可以轻松地将callable作为函数参数传递,而无需调用它们。

def cond():
    return True

def f():
    return 2

def g():
    time.sleep(60)

def if_function(condition_callable, call_if_true, call_if_false):
    if condition_callable():
        return call_if_true()
    else:
        return call_if_false()

if_function(cond, f, g)  # evaluates immediately, does not sleep since g is never evaluated.