2 votes

Que signifie-t-il lorsqu'une fonction Python est appelée dans le format f(x)(y)?

Dans cet article, la ligne de code suivante est donnée en exemple:

 x = layers.Dense(64, activation="relu", name="dense_1")(inputs)

Cela semble être un appel de fonction qui passe premièrement 64, puis deux arguments nommés, et enfin input.

Que se passe-t-il ici? Est-ce que inputs est passé à layers.Dense ou à autre chose?

7voto

VarChar42 Points 527

La fonction "Dense" renvoie quelque chose de callable qui est appelé par la deuxième paire de crochets.

Par exemple:

def fonction1():
    return fonction2

def fonction2():
    print('Fonction 2')

x = fonction1()
x() # Cela affichera "Fonction 2"

Il est également possible de renvoyer des classes. Dans ce cas, les crochets appelleront le constructeur créant ainsi une instance de la classe.

def fonction1():
    return SomeClass

class SomeClass:
    def __init__(self):
        print("__init__")

x = fonction1()
x() # Cela affichera "__init__"

1voto

Oghli Points 1275

Vous fournissez essentiellement un argument pour la fonction retournée par une autre fonction (fonction d'enrobage), également connue sous le nom de fonction interne:

def funcwrapper(y):
    def addone(x):
        return x + y + 1
    return addone

print(funcwrapper(3)(2))

Sortie:

6

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X