我遇到了以下面试问题,不知道如何解决:
def cons(a, b):
def pair(f):
return f(a, b)
return pair
给定一对,例如cons(6,8)
,我被要求分别返回a
和b
,例如在本例中分别返回6和8。
意思是,举个例子,
def first(pair):
pass
#would return pair's `a` somehow
def second(pair):
pass
#would return pair's `b` somehow
如何做到这一点呢?
发布于 2019-08-12 06:04:32
您可以尝试:
pair = cons(6, 8)
def first(pair):
return pair(lambda x, y: x)
def second(pair):
return pair(lambda x, y: y)
print(first(pair))
print(second(pair))
# ouput:
# 6
# 8
发布于 2019-08-12 05:38:51
函数cons
接受两个参数a
和b
,并返回一个接受一个参数f
的函数。返回的函数是一个闭包,因为它包含对a
和b
的引用,否则当cons
返回时,这两个引用就会超出范围。
返回的函数接受一个函数参数,使用a
和b
调用它,然后返回结果。
例如,如果您这样做:
func = cons(6, 8)
然后,您可以执行以下操作:
def g(a, b):
return a
func(g)
这将返回6
。类似地,如果您定义g
返回b
,那么func
将返回8
。
发布于 2019-08-12 05:39:15
这样如何:
c = cons(6, 8)
a = c.__closure__[0].cell_contents
b = c.__closure__[1].cell_contents
print(a, b)
https://stackoverflow.com/questions/57456048
复制