Передача аргументов функции после круглых скобок - PullRequest
0 голосов
/ 26 мая 2020

У меня проблемы с пониманием этого кода в Python

x = layers.Flatten()(last_output)

Поскольку Flatten - это функция, как функция получает данные из last_output, записанные вне скобок вызова функции. Не помню, чтобы видел такой код в Java.

Спасибо и привет

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Flatten () - это экземпляр класса (который, вероятно, вам понятен), а второй вызывает экземпляр с этим параметром. Чтобы это работало, в классе должна быть определена функция __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))

Также такое же поведение может быть получено с функцией, которая возвращает другую функцию с аргументами:

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))
0 голосов
/ 26 мая 2020

Рассмотрим это

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

Если вы вызовете outer, он вернет функцию print_thrice, которую вы затем можете вызвать. Таким образом, вы бы использовали его так:

x = outer()
x("hello")

Или, более компактно, outer()("hello"), что и происходит здесь.

...