Fonctions avec plusieurs paramètre entre parenthèses n'existent pas, comme vous l'avez vu lorsque vous avez essayé d'en définir un. Il ya, cependant, les fonctions qui retournent des (autres) fonctions:
def func(a):
def func2(b):
return a + b
return func2
Maintenant, lorsque vous appelez func()
il retourne à l'intérieur func2
fonction de:
>>> func2 = func(1) # You don't have to call it func2 here
>>> func2(2)
3
Mais si vous n'avez pas besoin de la fonction intérieure plus tard, alors il n'y a pas besoin de l'enregistrer dans une variable et vous pouvez les appeler directement l'un après l'autre:
>>> func(1)(2) # func(1) returns func2 which is then called with (2)
3
C'est un très commun de l'idiome lors de la définition des décorateurs prendre des arguments.
Notez que l'appelant func()
toujours crée une nouvelle fonction interne, même si ils sont tous nommés func2
à l'intérieur de la définition de notre - func
:
>>> f1 = func(1)
>>> f2 = func(1)
>>> f1(1), f2(1)
(2, 2)
>>> f1 is f2
False
Et, enfin, quelle est la différence entre f(a, b)
et f(a)(b)
?
Il devrait être clair maintenant que vous savez ce qu' f(a)(b)
, mais pour résumer:
-
f(a, b)
des appels f
avec deux paramètres, a
et b
-
f(a)(b)
des appels f
avec un paramètre a
, qui renvoie alors une autre fonction, qui est alors appelée avec un seul paramètre b