首页 > 解决方案 > DailyCodingProblems:f 参数/函数

问题描述

所以我正在处理日常的编码问题,而我今天遇到的问题让我很难过。

cons(a, b) 构造一个对,car(pair) 和 cdr(pair) 返回该对的第一个和最后一个元素。例如,car(cons(3, 4)) 返回 3,cdr(cons(3, 4)) 返回 4。

鉴于这种缺点的实现:

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

实现 car 和 cdr。

我不明白“f”代表什么。我尝试打印从该功能获得的东西:

x = cons(3, 4)
<function cons.<locals>.pair at 0x2adc0ec45ae8>

但我还是不明白它是什么。有任何想法吗?

标签: python

解决方案


让我们检查一下cons

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

所以调用cons(3, 4)动态创建一个函数,就好像你像这样静态定义它:

def pair_3_4(f)
    return f(3, 4)

相似地 :

pair1 = cons(2, 6)
pair2 = cons(5, 8)
pair3 = cons("a", "b")

相当于:

def pair1(f)
    return f(2, 6)
def pair2(f)
    return f(5, 8)
def pair3(f)
    return f("a", "b")

现在,让我们检查一下pair

def pair(f):
    return f(a, b)

由此,您可以猜测它f一定是一个可调用对象,并且它需要两个参数。最简单的可调用对象是一个函数,所以假设它f是一个函数。

您还可以看到,它只是简单地用任何东西pair调用并被绑定到它。fabcons

这是我print用作的示例f

>>> pair_3_4 = cons(3, 4)
>>> pair_3_4(print)
3 4
>>> cons(3, 4)(print)
3 4
>>> print(3, 4)
3 4

推荐阅读