首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中打开一个闭包?

如何在python中打开一个闭包?
EN

Stack Overflow用户
提问于 2019-08-12 13:31:31
回答 5查看 164关注 0票数 6

我遇到了以下面试问题,不知道如何解决:

代码语言:javascript
运行
复制
def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

给定一对,例如cons(6,8),我被要求分别返回ab,例如在本例中分别返回6和8。

意思是,举个例子,

代码语言:javascript
运行
复制
def first(pair):
    pass
    #would return pair's `a` somehow

def second(pair):
    pass
    #would return pair's `b` somehow

如何做到这一点呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-08-12 14:04:32

您可以尝试:

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2019-08-12 13:38:51

函数cons接受两个参数ab,并返回一个接受一个参数f的函数。返回的函数是一个闭包,因为它包含对ab的引用,否则当cons返回时,这两个引用就会超出范围。

返回的函数接受一个函数参数,使用ab调用它,然后返回结果。

例如,如果您这样做:

代码语言:javascript
运行
复制
func = cons(6, 8)

然后,您可以执行以下操作:

代码语言:javascript
运行
复制
def g(a, b):
    return a

func(g)

这将返回6。类似地,如果您定义g返回b,那么func将返回8

票数 2
EN

Stack Overflow用户

发布于 2019-08-12 13:39:15

这样如何:

代码语言:javascript
运行
复制
c = cons(6, 8)
a = c.__closure__[0].cell_contents
b = c.__closure__[1].cell_contents

print(a, b)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57456048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档