Python

Tutoriel sur les fermetures Python

Tutoriel sur les fermetures Python
Une fermeture est une méthode ou une fonction interne imbriquée qui reconnaît et a le privilège d'utiliser les variables même après que la fonction externe a fini de s'exécuter dans la portée locale dans laquelle elle a été créée. Une variable doit provenir d'une fonction ou d'une portée externe et n'est certainement pas limitée dans l'espace local à utiliser. Il y a trois caractéristiques d'une fermeture Python, ce sont les suivantes :

Fonction imbriquée

Vous devez d'abord comprendre ce qu'est une méthode imbriquée. Une fonction imbriquée peut être définie comme une méthode spécifiée dans une autre méthode. Les fonctions récursives peuvent atteindre les variables de la portée externe. Pour modifier les variables non locales, nous les définissons spécifiquement comme non locales via des mots-clés non locaux car elles sont par nature en lecture seule. Alors, tout d'abord, jetez un œil à la fonction imbriquée exécutée dans Spyder Python 3.

Nous avons défini deux fonctions : l'extérieure et l'intérieure. Dans la fonction externe, nous avons déclaré une variable contenant une valeur de texte.

def external_func()
msg = 'Salut! Je suis Aqsa Yasin'

Cette variable a été imprimée dans la fonction interne à l'aide d'une instruction print. La fonction interne est ensuite retournée, qui est une fonction imbriquée, et après cela, la fonction externe a été appelée.

def inner_func()
imprimer (msg)
retourner inner_func()
inner_func()

Si vous n'utilisez pas le mot-clé return pour renvoyer la fonction interne, il renverra toujours le même résultat.

Lorsque vous exécutez ce code simple, il vous renverra le texte, défini comme la valeur dans la variable 'msg'.

Sortie : Hy! Je suis Aqsa Yasin

Définissez maintenant le même type de fonction imbriquée sans mot-clé de retour et variable en passant 'msg' en paramètre, et vous obtiendrez la même sortie.

Sortie : Bonjour

Fonction de fermeture simple

Utilisez le même code, avec un peu de changement sur les deux dernières lignes. Avec la ficelle 'Bonjour', les show_msg() méthode a été invoquée et la méthode renvoyée était liée au mot 'une autre'. En appelant une autre(), le texte 'Bonjour' était encore rappelé, tandis que le show_msg() méthode avait déjà été fait en cours d'exécution. Assurez-vous d'ajouter la variable 'msg' dans la fonction extérieure.

Lorsque vous exécutez ce code, il montrera que la fonction interne, qui est un spectacle(), a été affecté à la variable 'une autre'.

Production: .montrer à 0x0000020CCED4D820>

Vous pouvez simplement imprimer le Nom d'une fonction affectée à une variable 'une autre' comme:

imprimer (un autre.__Nom__)

Il affichera le nom d'une fonction.

Sortie : afficher

Maintenant, si vous souhaitez exécuter cette variable en tant que fonction, comme d'autres méthodes, vous pouvez le faire en ajoutant des parenthèses et en l'appelant comme ceci :

un autre = show_msg("Bonjour")
une autre()
une autre()

Vous pouvez l'appeler autant de fois que vous le souhaitez.

Lorsque vous exécutez ce code, il affichera quelque chose comme ceci :

Production:

Bonjour

Bonjour

Bonjour

Maintenant, vous pouvez voir que même après la fin de l'exécution de la fonction externe, la fonction interne se souvient toujours des variables et autres choses qui ont été créées ou définies dans l'espace local.

Fonction de fermeture à l'aide de paramètres

Maintenant, nous avons ajouté des paramètres en passant une variable dans la fonction externe comme :

def show_msg(msg)

La valeur passée dans le paramètre de fonction externe sera affectée à une variable définie dans cette fonction externe comme :

Message = message

Passez quelques valeurs de chaîne dans les variables nouvellement créées à la dernière ligne, comme :

func1 = show_msg('Salut')
func2 = show_msg('Bonjour')

Maintenant, vous devez appeler ces fonctions comme ceci :

fonction1()
func2()

Vous obtiendrez la sortie suivante affichée dans l'image de l'éditeur spyder :

Au sein de Python, ce processus, par lequel toutes les données (Salut ou Bonjour pour ce scénario) sont attachées au script, est nommé Fermeture.

Multiplication simple à l'aide de Python Closure

Nous avons défini deux fonctions. L'un est externe, qui a un multiplicateur défini, et l'intérieur dans lequel la valeur sera transmise lors de l'appel de la fonction. Dans la fonction externe, nous avons déclaré une variable avec une valeur multiplicatrice définie qui lui a été transmise. Cette valeur multiplicatrice 'n' a été multiplié par une certaine valeur 'X' qui est passé dans l'instruction print à la fonction interne. La fonction interne est ensuite renvoyée, qui est une fonction imbriquée, et après cela, les variables ont été appelées les unes après les autres dans les instructions d'impression.

def out_multiply(n):
def in_multiply(x):
retourner x * n
retourner in_multiply

Maintenant, la nouvelle variable a assigné une valeur à passer dans le paramètre de la fonction externe. Cette valeur sera enregistrée dans la variable 'n', qui est un multiplicateur défini dans la fonction externe :

fois3 = out_multiply(3)
fois5 = out_multiply(5)

Ces variables seront affectées avec plus de valeurs, qui seront enregistrées dans le 'X' variable définie dans la fonction interne qui doit être multipliée par le multiplicateur 'n'. Lorsque nous imprimons la variable nommée "fois", une fonction avec une valeur entière 'X' attribué entre parenthèses le multipliera par la valeur de la fonction extérieure 'n'.

Le premier sera sortie 27 lors de l'exécution de l'instruction print car la variable 'n' possède 3 comme multiplicateur, et nous avons donné 9 comme un autre entier à multiplier.

imprimer(fois3(9))

Le second sera sortie 15 lors de l'exécution de l'instruction print car la variable 'n' possède 3 comme multiplicateur, et nous avons donné 5 comme un autre entier à multiplier.

imprimer(fois5(3))

Le dernier sera sortie 30 lors de l'exécution d'une instruction print car elle a appelé récursivement times to function variable. La première fois, les temps ont 'n' ayant 3 comme multiplicateur, qui sera multiplié en entier 2. Lors de la multiplication, il affichera 6. Maintenant, ce 6 sera utilisé comme valeur, puis passé comme argument à la fonction variable des temps, où le 'n' multiplicateur variable est 5. Donc quand 5 est multiplié par 6 il sortira 30.

imprimer(fois5(fois3(2)))

Vous pouvez voir la sortie dans la console de l'éditeur Spyder.

Conclusion

Les fermetures peuvent interdire l'utilisation des valeurs globales et avoir une forme de masquage des données. Il pourrait également fournir une approche orientée objet ou entité du problème. Espérons qu'après avoir suivi ce guide, vous pourrez acquérir les bases de la fermeture Python.

Le bouton central de la souris ne fonctionne pas sous Windows 10
le bouton central de la souris vous aide à faire défiler de longues pages Web et des écrans contenant beaucoup de données. Si cela s'arrête, et bien v...
Comment changer les boutons gauche et droit de la souris sur un PC Windows 10
Il est tout à fait normal que tous les appareils de souris d'ordinateur soient conçus de manière ergonomique pour les droitiers. Mais il existe des so...
Émulez les clics de souris en survolant à l'aide de la souris sans clic dans Windows 10
L'utilisation d'une souris ou d'un clavier dans la mauvaise posture d'une utilisation excessive peut entraîner de nombreux problèmes de santé, notamme...