Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
if-then-else_monoligne [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


if-then-else_monoligne

Warning: Undefined array key 4 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1453

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
if-then-else_monoligne [2008/06/13 17:31]
tyrtamos créée
if-then-else_monoligne [2008/06/13 17:43]
tyrtamos
Ligne 3: Ligne 3:
 ===== Problématique ===== ===== Problématique =====
  
-le "if", nécessaire pour restituer un résultat différent selon une condition, est une instruction et, en tant que tel, n'est pas permis dans une expression ni dans une fonction lambda.+le "if", nécessaire pour restituer un résultat différent selon une condition, est une **instruction** et, en tant que tel, n'est pas permis dans une expression ni dans une fonction lambda.
  
 Il s'agit en fait de simuler ce qui existe dans certains langages comme (cond ? si_oui : si_non) Il s'agit en fait de simuler ce qui existe dans certains langages comme (cond ? si_oui : si_non)
Ligne 9: Ligne 9:
 ===== Solution avant la version 2.5 de Python ===== ===== Solution avant la version 2.5 de Python =====
  
-Prenons d'abord une solution simple: (cond and x or y) avec un exemple:+Prenons d'abord une solution simple:  
 + 
 +<code python> 
 +(cond and x or y) 
 +</code> 
 + 
 +Et prenons un exemple:
  
 <code python> <code python>
Ligne 24: Ligne 30:
 donc, si cond est vrai ainsi que x, renvoi de x. Sinon, le or est exécuté et y est renvoyé. donc, si cond est vrai ainsi que x, renvoi de x. Sinon, le or est exécuté et y est renvoyé.
  
-Mais dans cette forme simplifiée, si x=0, ça ne marche plus:+Cela semble bien fonctionner, mais dans cette forme simplifiée, si x=0, ça ne marche plus:
  
 <code python> <code python>
Ligne 34: Ligne 40:
 En effet, pour que ça marche, il ne faut pas que x puisse être évalué à False (donc ni à 0, ni à "", ni à [], ni à (), ni à {}).  En effet, pour que ça marche, il ne faut pas que x puisse être évalué à False (donc ni à 0, ni à "", ni à [], ni à (), ni à {}). 
  
-D'où l'astuce de passer par une liste qui, si elle n'est pas vide,  sera toujours True (essayez: même [False] est évalué à True!).+On utilise une astuceune liste qui, si elle n'est pas vide, sera toujours True (essayez: même [False] est évalué à True!).
  
 La solution est donc: La solution est donc:
Ligne 51: Ligne 57:
 </code> </code>
  
-Avec l'exemple ci-dessus x=0 et y=3:+Exemple:
  
 <code python> <code python>
 +x=0
 +y=3
 print (x<y and [x] or [y])[0]  # affiche 0 print (x<y and [x] or [y])[0]  # affiche 0
 print (x>y and [x] or [y])[0]  # affiche 3 print (x>y and [x] or [y])[0]  # affiche 3
Ligne 87: Ligne 95:
 </code> </code>
  
 +Cette solution est également utilisable dans une fonction lambda alors qu'un "if" serait interdit:
  
 +<code python>
 +toto = lambda x,y: (x if x<y else y)
 +toto(2,3)  # affiche: 2
 +toto(2,1)  # affiche: 1
 +</code>
  
 Voir aussi la pep 308: [[http://www.python.org/dev/peps/pep-0308/]] Voir aussi la pep 308: [[http://www.python.org/dev/peps/pep-0308/]]
  
  
 +<html>
 +<head>
 +<style type="text/css">
 +<!--
 +body {background-image:url(fondcorps.jpg);}
 +-->
 +</style>
 +</head>
 +<body>
 +</body>
 +</html>
  
  
  
if-then-else_monoligne.txt · Dernière modification: 2008/06/15 07:04 de tyrtamos