Comments on: Quelques astuces à propos de and et or http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: cladmi http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162809 Wed, 01 Jul 2015 15:40:37 +0000 http://sametmax.com/?p=16421#comment-162809 Une autre utilisation géniale du comportement de or c’est pour la gestion des valeurs de paramètres par défaut.

D’après http://sametmax.com/id-none-et-bidouilleries-memoire-en-python/, il faudrait tester si une variable est None avec un “is None” au lieu de traiter comme un booléen mais c’est quand même super joli de faire:

>>> def call_prog(args=None):
...     args = args or []
...     cmd = ['program'] + args
...     print cmd
...     # subprocess.call(cmd)
... 
>>> call_prog()
['program']
>>> call_prog(None)
['program']
>>> call_prog(['arg1', 'arg2'])
['program', 'arg1', 'arg2']

]]>
By: Fritz http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162799 Wed, 01 Jul 2015 13:21:55 +0000 http://sametmax.com/?p=16421#comment-162799 C’est fou, en Ada, les “and” et “or” testent toutes les opérandes et on a deux autres opérateurs qui sont “and then” et “or else” qui font ce qui est fait en Python. J’ai jamais rien revu de la sorte dans un autre langage.

]]>
By: Samson http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162793 Wed, 01 Jul 2015 11:13:15 +0000 http://sametmax.com/?p=16421#comment-162793 Une autre raison possible de la non intégration de xor builtins est peut être le fait que and et or retourne en résultat l’un de leur opérande. Avec xor c’est plus dur au mieux (sujet à interprétation) l’on a:

def xor(x, y):
    return (x and not y and x) or (not x and y)

for x in ([], ["Y"]):

    for y in (0.0, 3.14):
        print "{0} xor {1} = {2}".format(x, y, xor(x, y))
    
[] xor 0.0 = 0.0
[] xor 3.14 = 3.14
['Y'] xor 0.0 = ['Y']
['Y'] xor 3.14 = False

Bon l’opérateur not lui aussi retourne des booléens quelques soient l’opérande ; mais c’est peut être une explication car on pourrait vouloir d’autres politique de sortie pour xor!!!

]]>
By: Sam http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162791 Wed, 01 Jul 2015 08:55:00 +0000 http://sametmax.com/?p=16421#comment-162791 En effet :)

]]>
By: Abject http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162790 Wed, 01 Jul 2015 08:01:38 +0000 http://sametmax.com/?p=16421#comment-162790 @Sam: c’est que les qu’en Python ==> c’est qu’en Python non ?

Super intéressant.

]]>
By: nabellaleen http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162788 Wed, 01 Jul 2015 05:37:37 +0000 http://sametmax.com/?p=16421#comment-162788 Autre utilisation pratique du fait que les opérateurs retournent le dernier objet évalué, c’est pour l’initialisation par défaut :

mon_repas = get_repas() or ['brioche', 'pastis']

Si get_repas renvoie une valeur évaluée à False (None ou une liste vide, par exemple), alors mon_repas prendra pour valeur [‘brioche’, ‘pastis’]

]]>
By: kontre http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162780 Tue, 30 Jun 2015 22:14:23 +0000 http://sametmax.com/?p=16421#comment-162780 Y’a une alternative à ^ pour le XOR: bool(a) != bool(b). Suivant les cas et la manière de penser des gens, ça peut être plus clair. Perso je l’utilise parce que l’opérateur ^ est très peu courant en python

]]>
By: Fred http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162779 Tue, 30 Jun 2015 21:24:08 +0000 http://sametmax.com/?p=16421#comment-162779 @Xavier Combelle

Le “&&” n’est pas un opérateur d’évaluation d’expression mais un opérateur de séquence d’instructions. Si l’instruction placée à gauche est vraie alors il continue sur l’instruction de droite (je m’en sers d’ailleurs dans mon exemple). Bien évidemment, si l’instruction de gauche est fausse alors l’instruction de droite n’est pas exécutée ce qui donne un résultat similaire, effectivement, à une évaluation (tu la nommes “paresseuse”, moi je la nomme “optimisée”) ; mais moi je parlais du comportement de l’évaluateur de base “test” (qui est d’ailleurs identique au programme “/usr/bin/test”)

@entwanne

J’aime bien ton analogie. Effectivement je n’avais jamais vu les choses sous cet angle ;)

]]>
By: Sam http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162772 Tue, 30 Jun 2015 19:57:46 +0000 http://sametmax.com/?p=16421#comment-162772 Bien vu.

]]>
By: Migwel http://sametmax.com/quelques-astuces-a-propos-de-and-et-or/#comment-162771 Tue, 30 Jun 2015 19:48:47 +0000 http://sametmax.com/?p=16421#comment-162771 Hello,

Article très intéressant. Une petite erreur s’est glissé cela dit (il me semble) :

faux() or vrai()

Yeah !

Errrr...

True

devrait être

faux() or vrai()

Errrr...

Yeah !

True

]]>