Ci-dessous, les différences entre deux révisions de la page.
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 " | + | le " |
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' | + | Prenons d' |
+ | |||
+ | <code python> | ||
+ | (cond and x or y) | ||
+ | </ | ||
+ | |||
+ | Et prenons | ||
<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, | + | Cela semble bien fonctionner, |
<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 à "", | En effet, pour que ça marche, il ne faut pas que x puisse être évalué à False (donc ni à 0, ni à "", | ||
- | D'où l'astuce | + | On utilise une astuce: une 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: | ||
</ | </ | ||
- | Avec l' | + | Exemple: |
<code python> | <code python> | ||
+ | x=0 | ||
+ | y=3 | ||
print (x<y and [x] or [y])[0] | print (x<y and [x] or [y])[0] | ||
print (x>y and [x] or [y])[0] | print (x>y and [x] or [y])[0] | ||
Ligne 87: | Ligne 95: | ||
</ | </ | ||
+ | Cette solution est également utilisable dans une fonction lambda alors qu'un " | ||
+ | <code python> | ||
+ | toto = lambda x,y: (x if x<y else y) | ||
+ | toto(2, | ||
+ | toto(2, | ||
+ | </ | ||
Voir aussi la pep 308: [[http:// | Voir aussi la pep 308: [[http:// | ||
+ | < | ||
+ | < | ||
+ | <style type=" | ||
+ | <!-- | ||
+ | body {background-image: | ||
+ | --> | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | </ | ||
+ | </ | ||