En étudiant Python, je n'ai pas compris ce que je disais quand quelque chose appelé une fermeture est sorti, alors j'ai fait une note pour que je puisse regarder en arrière quand je l'oublierais.
Fondamentalement, vous pouvez le comprendre en vous référant à ce qui suit. Astuces Python: je souhaite utiliser la fermeture avec Python [Quand utilisez-vous la fermeture? -Liste trois scénarios d'utilisation](http://qiita.com/HirofumiYashima/items/ed17c83f26de3d510b93#python-tipspython%E3%81%A7%E3%82%AF%E3%83%AD%E3%83 % BC% E3% 82% B8% E3% 83% A3% E3% 82% 92% E4% BD% BF% E3% 81% 84% E3% 81% 9F% E3% 81% 84) [Python] Fonction (4)
En gros, la fermeture ** La valeur de la variable dans la fonction est la valeur de la variable qui a passé lorsque la fonction a été déclarée (la fonction a été lue). ** ** C'est ce que je comprends maintenant.
Dans un tel cas, 5 est stocké dans la variable "i" lorsque la fonction est lue, donc même si 6 est entré dans la variable "i" après cela, la valeur renvoyée sera 5.
i = 5
def f(arg=i):
print(arg)
i = 6
f()
http://docs.python.jp/3/tutorial/controlflow.html
J'ai vécu dans un monde sans rapport avec Cloja, alors pourquoi! 6 Yaro! Il y a un sentiment. Alors, [Quand utilisez-vous Closure? -Liste trois scénarios d'utilisation](http://qiita.com/HirofumiYashima/items/ed17c83f26de3d510b93#python-tipspython%E3%81%A7%E3%82%AF%E3%83%AD%E3%83 % BC% E3% 82% B8% E3% 83% A3% E3% 82% 92% E4% BD% BF% E3% 81% 84% E3% 81% 9F% E3% 81% 84) cette.
def circle_area_func(pi):
"""Renvoie une fonction pour trouver l'aire d'un cercle"""
def circle_area(radius):
return pi * radius ** 2 #Ce pi est un cercle_area_func()Valeur spécifiée dans l'argument de
return circle_area #Renvoie la fonction en tant que valeur de retour
#Rapport de circonférence 3.Génère une fonction pour calculer la surface lorsqu'elle est définie sur 14
ca1 = circle_area_func(3.14)
#Ensuite, définissez le rapport de circonférence sur 3.Générer la fonction lorsqu'il est réglé sur 141592
ca2 = circle_area_func(3.141592)
#Les deux fonctions créées ci-dessus ont un rayon=Obtenez le résultat de l'opération en donnant 1 comme argument
ca1(1)
ca2(1)
#Les deux fonctions créées ci-dessus ont un rayon=Obtenez le résultat de l'opération en donnant 2 comme argument
ca1(2)
ca2(2)
Les paramètres de chaque fonction ont leurs propres valeurs, mais je ne savais pas pourquoi c'était la valeur stockée dans radius.
En premier lieu, je ne semblais pas comprendre ce qui était stocké dans ca1 de "ca1 = circle_area_func (3.14)".
J'ai toujours pensé qu'il était stocké dans ca1 dans la fonction "circle_area_func (pi)", mais ce n'était pas la fonction "circle_area (radius)".
def circle_area(radius):
return pi * radius ** 2 #Ce pi est un cercle_area_func()Valeur spécifiée dans l'argument de
return circle_area
Lorsque "ca1 (1)" est exécuté dans le traitement suivant, la fonction "circle_area (radius)" est appelée. Par conséquent, 1 de "ca1 (1)" est stocké dans le paramètre "rayon".
La variable "pi" dans la fonction "circle_area (radius)" est un concept de fermeture, et elle contient juste 3.14 qui a été entrée comme argument dans "ca1 = circle_area_func (3.14)".
Cela a pris énormément de temps, mais j'ai faim.
Recommended Posts