TD d'Informatique

 TD 7 - Python


TKinter


Les fonctions Lambda

Python permet de définir des mini-fonctions d’une ligne à la volée. Ces fonctions sont dites "lambda" et peuvent être employées partout où une fonction est nécessaire.

Exemple de fonctions lambda

def f(x):
    return x*2
   
f(3)            ---> 6 

g = lambda x: x*2 
g(3)            ---> 6

lambda x=3: x*2        ---> 6

Les fonctions lambda font la même chose que la fonction du début.
Notez la syntaxe condensée : il n’y a pas de parenthèses autour de la liste d’arguments et le mot-clé return est manquant (il est implicite, la fonction complète ne pouvant être qu’une seule expression).
Remarquez aussi que la fonction n’a pas de nom, mais qu’elle peut être appelée à travers la variable à laquelle elle est assignée.
Vous pouvez utiliser une fonction lambda sans l’assigner à une variable.
Les fonctions lambda ne peuvent pas contenir de commandes et elles ne peuvent contenir plus d’une expression. N’essayez pas de mettre trop de choses dans une fonction lambda, si vous avez besoin de quelque chose de complexe, définissez plutôt une fonction normale.

Ces fonctions sont surtout utiles pour faire des programmes avec Tkinter.
Un objet graphique n'accepte comme commande que des fonctions sans argument:

Exemple:
Button(fenetre1, texte="mon bouton", command=mafonction)

Si vous voulez appeler une fonction avec des arguments, la solution consiste à utiliser une fonction lambda qui elle-même appele une fonction classique avec des arguments:

Exemple:
macommande =     lambda x="mon_argument": mafonction(x)
Button(fenetre1, texte="mon bouton", command=macommande)

La fonction eval

eval est une fonction souvent utilisée dans plusieurs langages.
L'argument passé à eval est évalué par le programme, c'est à dire que le contenu est considéré comme une instruction a executer.

Exemple:
var = "2 + 3"
print var      -----> print '2 + 3'
print eval(var)      -----> 5



Exercice - Calculatrice

Réaliser une calculatrice simple, comme celle intégrée à Windows.
Affichez une boite entry dans laquelle vous pourrez mettre vos opérations. Le résultat sera également affiché dans cette boite
Affichez les boutons suivants: les 10 chiffres, +, -, *, /. En cliquant sur un de ces boutons, le texte correspondant doit se mettre dans la boite entry.
Puis, mettre les boutons: C (pour reinitialier l'affichage), = (pour afficher le résultat)
Les boutons devront appeler une fonction qui exécutera la bonne action pour chacun d'eux.

Quelques conseils utiles (mais pas forcément indispensables):

Pour assigner une commande à vos boutons, vous aurez probablement besoin de fonctions "lambda"
Pour calculer le résultat d'une opération, vous aurez besoin de "eval"
Enfin, les erreurs doivent être gérées (par exemple si une lettre est entrée manuellement par l'utilisateur). Un message d'erreur doit alors s'afficher.