3层功能并使用最内层的一个输出结果

时间:2018-02-08 21:15:20

标签: python function

这更像是一个脑筋急转弯,而不是一个实际的行为。我创建了一个相互堆叠的3层功能。我不能告诉python只用最里面的函数将3个给定的数字参数加在一起,任何人都可以帮忙吗?

    def first(x):
        def second(y):
            def third(z):
                return(x+y+z)
            return third

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

3 个答案:

答案 0 :(得分:2)

你需要每个函数返回它的'子'函数,然后保持对它的引用,然后在下一步调用 - 比如:

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))

答案 1 :(得分:2)

此代码的问题是无法调用函数second。它与尝试调用它的代码不在同一个词法范围内。

有效的示例:

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 :(得分:0)

就像second需要返回third一样,first需要返回second

def first(x):
    def second(y):
        def third(z):
            return(x+y+z)
        return third
    return second

此外,您无法直接致电second,因为这是first的本地名称。您需要调用first的返回值:

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