Significado de la función de llamada en Python?

Vi una función de Python en el tutorial de Keras como esta:

from keras.layers import Input, Dense from keras.models import Model # this returns a tensor inputs = Input(shape=(784,)) # a layer instance is callable on a tensor, and returns a tensor x = Dense(64, activation='relu')(inputs) 

Sin embargo, no tengo idea de cuál es el significado de la función que llama a la forma:

 x = Dense(64, activation='relu')(inputs) 

¿Por qué hay un “(entradas)” fuera del corchete de la lista de parámetros de la función “Densa”?

Debido a que Dense(...) devuelve un llamable (básicamente, una función), puede llamarse a su vez. Aquí hay un ejemplo simple:

 def make_adder(a): def the_adder(b): return a + b return the_adder add_three = make_adder(3) add_three(5) # => 8 make_adder(3)(5) # => 8 

Aquí, make_adder(3) devuelve la función que se define como

 def the_adder(b) return 3 + b 

luego llamando a esa función con el argumento 5 devuelve 8 . Si omite el paso de asignar el valor de retorno de make_adder(3) a una variable separada, obtendrá el formulario que estaba preguntando sobre: make_adder(3)(5) es lo mismo que Dense(64, activation='relu')(inputs) de su pregunta.

EDITAR: Técnicamente, Dense no se clasifica como una función en Python, sino como una clase; Dense(...) es, pues, una invocación de un constructor. La clase en cuestión define el método __call__ , que hace que los objetos de esta clase sean “invocables”. Tanto las funciones como los objetos invocables pueden invocarse invocándolos con una lista de argumentos, y la diferencia entre los dos no afecta en absoluto a la explicación. Sin embargo, aquí hay un ejemplo de un simple invocable, que se asemeja más estrechamente a Dense :

 class Adder: def __init__(self, a): self.a = a def __call__(self, b): return self.a + b adder_of_three = Adder(3) adder_of_three(5) # => 8 Adder(3)(5) # => 8