首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3层函数,用最内层的函数输出结果

3层函数,用最内层的函数输出结果
EN

Stack Overflow用户
提问于 2018-02-09 05:15:20
回答 3查看 47关注 0票数 0

这更像是脑筋急转弯,而不是实际行动。我已经创建了一个相互堆叠的3层函数。我不能告诉python将3个给定的数字参数加在一起,只需要最里面的函数,有人能帮上忙吗?

代码语言:javascript
运行
复制
    def first(x):
        def second(y):
            def third(z):
                return(x+y+z)
            return third

    third1 = first(1)
    third2 = second(2)
    ....... get stuck here .......
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-09 05:24:08

这段代码的问题是不能调用函数second。它与试图调用它的代码不在同一词法范围内。

有效的示例:

代码语言:javascript
运行
复制
def first(x):
    def second(y):
        def third(z):
            return x+y+z
        return third
    return second

f = first(1)
s = f(2)
print s(4)  # 6
票数 2
EN

Stack Overflow用户

发布于 2018-02-09 05:21:27

你需要每个函数返回它的“子”函数,然后保留对它的引用,以便在下一步调用-类似于:

代码语言:javascript
运行
复制
def first(x):
    print(x)
    def second(y):
        print(y)
        def third(z):
            print(z)
            return(x+y+z)
        return third
    return second

two = first(1)
three = second(2)
print(three(3))
票数 2
EN

Stack Overflow用户

发布于 2018-02-09 05:23:02

正如second需要返回third一样,first也需要返回second

代码语言:javascript
运行
复制
def first(x):
    def second(y):
        def third(z):
            return(x+y+z)
        return third
    return second

此外,您不能直接调用second,因为它是first的本地名称。需要调用first的返回值

代码语言:javascript
运行
复制
f1 = first(1) # f1 is second wrapped around x == 1
f2 = f1(2)    # f2 is third wrapped around x == 1 and y == 2
f3 = f2(3)    # f3 is 1 + 2 + 3 == 6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48694905

复制
相关文章

相似问题

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