Calculatrice, introduction au lambda

Contenu du snippet

Ca fait plusieurs fois que je voix que des personnes ne savent pas utiliser le lambda en python.

c'est pourtant très important ! Je vais donc vous montrer cette source, pas pour son utilité mais plutôt comme un exemple d'utilisation du lambda.

Cette fonction est essentielle, elle vous permettra de gagner _BEAUCOUP_ de temps

Source / Exemple :


# -*- coding: cp1252 -*-
#correction du code de http://www.pythonfrance.com/codes/CALCULATRICE-SIMPLICISTE-SOUS-TKINTER_50496.aspx
#que je vous invite à aller voir, comme ce qui peut être nécessaire si on ne connait pas lambda
#je suis passé de 180 lignes à 25 (si on enlève les commentaires)
from Tkinter import*

chain=""

#ici on aura une action qui dépend du bouton qui à appelé cette fonction
def func(b):
    global chain
    if b=="C":chain="0"
    elif b=="=":chain=eval(chain)
    else : chain+=b
    z.set(chain) 

fen = Tk()
fen.title('Calculatrice')
a=""
i=1
j=1

#ici est la partie la plus importante.
for a in ["0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","=","C"]:
    Button(fen,text = a, command=lambda b=a:func(b)).grid(column=i,row=j)
    j+=1              #
    if j==5:j,i=1,i+1 #ma manière à moi d'organiser rapidement mes boutons
#je vais décomposer :
#dans un premier temps on va créer une liste de tout les boutons avec leur nom.
#afin d'éviter de créer une quinzaine de fonction, on va vouloir que chaque bouton
#bouton appèlent cette même fonction en donnant aussi leur nom
#par example, le bouton 8 appèlera la fonction func("8")
#
#Cependant, on ne peut pas dire :
#Button(fen,text = a, command=func(a))
#ça éxécuterai func(a) à la création du bouton, et donnerai None en fonction..
#
#C'est ici qu'intervient le lambda, fonction asser simple mais irremplassable :
#lambda b=a:func(b) retourne une fonction, func(a)
#et comme on le voulait le boutton reverra son nom.
#cella évitera de créer quinze fonctions.
#et d'avoir un code de 180 lignes au lieu de 25
z = StringVar()
entree=Entry(fen,textvariable=z)
entree.grid(row=0)
z.set(chain) 
Button(fen,text='Quitter',command = fen.quit).grid(row=1)
fen.mainloop()

Conclusion :


Conclusion : Il faut absolument connaitre lambda, c'est simple à utiliser et une fois qu'on connais on s'en rappèle.

Et il y en a beaucoup qui malheureusement ne le connaissent pas.

Pour plus d'info : http://www.secnetix.de/olli/Python/lambda_functions.hawk

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.