Calculatrice, introduction au lambda

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 047 fois - Téléchargée 17 fois

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

Ajouter un commentaire

Commentaires

Messages postés
336
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 novembre 2011
1
Oui l'interpréteur, renvoyais une erreur s'il n'y avait pas d'argument !
Messages postés
4
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
8 décembre 2009

Salut,
Pourquoi la syntaxe de lambda doit etre ici de la forme lambda b=a:func(b) et pas de la forme habituelle lambda a:func(a) ? l'interpreteur se plaigant que l'on ne passe pas d'argument a lambda?

en fait la syntaxe lambda x=y:func(x) permet l'appel direct de la fonction resultante sans lui passer le parametre a traiter. Voila le detail:

def func(b):
return (b*2)

a=100

d=lambda a:func(a)
print d(100) #appel avec d() impossible

c =(lambda x:func(x))(a)
print c #resultat en utilisant la valeur de "a" directement mais "c" variable et non plus fonction

e= lambda p=a:func(p)
print e() #syntaxe permettqnt d'appeller la fonction e() directement avec la valeur de "a" sans la passer en parametre

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.