在括号后将参数传递给函数

Passing arguments to function after parenthesis

我无法理解 Python

中的这段代码
x = layers.Flatten()(last_output)

既然Flatten是一个函数,那么函数调用括号外写的last_output如何获取数据呢。不记得在 Java.

中看到过这种代码

感谢和问候

考虑一下

def outer():
    def print_thrice(string):
          for _ in range(3):
              print (string)
    return print_thrice

如果您调用 outer,它将 return 然后您可以调用的 print_thrice 函数。所以你会像这样使用它

x = outer()
x("hello")

或者更简洁地说,outer()("hello") 这就是这里发生的事情。

Flatten() 是 class 实例化(您可能很清楚),第二个使用该参数调用实例。为此,class 必须定义一个 __call__ 函数。

示例:

class Sum:
    def __call__(self, a, b, c):
        return a + b + c

s = Sum()
print(s(3, 4, 5))
print(Sum()(3,4,5))

同样的行为也可以通过 returns 另一个带参数的函数获得:

def Sum2():
    def Sum3(a, b, c):
        return a + b + c
    return Sum3

s2 = Sum2()
print(s2(3, 4, 5))
print(Sum2()(3, 4, 5))