Что значат 2 набора скобок при обращении к классу в python?

Например:

x = layers.Conv2D(filters=32, kernel_size=(3, 3), activation="relu")(x)

Или это:

x = layers.GlobalAveragePooling2D()(x)

Никак не могу понять что это за (x) передается и чему в конце


Ответы (1 шт):

Автор решения: CrazyElf

Скорее всего тут ситуация, когда функция возвращает в качестве результата другую функцию. И вот эта функция-результат потом вызывается с аргументом. На этом же принципе построены декораторы в питоне. Простейший пример:

def func(a):
  def f(x):
    return a+x
  return f

print(func(1)(2))
print(func(42))

Вывод:

3
<function func.<locals>.f at 0x7fafb43a2050>

Как видим, func(...) возвращает функцию, а func(...)(...) возвращает результат работы этой функции. В принципе, такие цепочки могут быть и длиннее, чем два звена.

→ Ссылка