Je suis récemment entré en contact avec python et j'ai vu le concept de fonction de retour en python. Je n'ai été exposé qu'à la valeur de retour de fonction auparavant. Par exemple, python peut renvoyer un int. , str, list, dict, etc. Tapez data, ce que je veux dire ici, c'est que python prend également en charge la fonction de retour .
Tout d'abord, examinons la syntaxe de base de la prise en charge par Python de la fonction de retour
def f(): print 'call f()...' # 定义函数g: def g(): print 'call g()...' # 返回函数g: return g
Implémentons la somme des paramètres variables. Habituellement, la fonction de sommation est définie comme ceci :
def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax
Cependant, que se passe-t-il si la somme n'a pas besoin d'être calculée immédiatement, mais est calculée selon les besoins dans le code suivant ? Au lieu de renvoyer le résultat de la sommation, vous pouvez renvoyer la fonction de sommation :
def lazy_sum(*args): def sum(): ax = 0 for n in args: ax = ax + n return ax return sum
Lorsque nous appelons lazy_sum(), ce qui est renvoyé n'est pas le résultat de la sommation, mais la fonction de sommation :
>>> f = lazy_sum(1, 3, 5, 7, 9) >>> f <function lazy_sum.<locals>.sum at 0x101c6ed90>
Le résultat de la somme est effectivement calculé lorsque la fonction f est appelée :
>>> f() 25
Dans cet exemple, nous définissons la fonction somme dans la fonction lazy_sum, et la fonction interne somme peut référencer les paramètres et variables locales de la fonction externe lazy_sum. Lorsque lazy_sum renvoie la fonction sum, les paramètres et variables pertinents sont enregistrés dans la fonction renvoyée. Cette structure de programme appelée "Closure" a une grande puissance.
Veuillez noter encore une chose, lorsque nous appelons lazy_sum(), chaque appel retournera une nouvelle fonction, même si les mêmes paramètres sont passés :
>>> f1 = lazy_sum(1, 3, 5, 7, 9) >>> f2 = lazy_sum(1, 3, 5, 7, 9) >>> f1==f2 False
f1() et f2 Les résultats de l'appel de () ne s'influencent pas mutuellement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!