Bonjour,
Question perte de temps:
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part if not e in l?
Code : Sélectionner tout - Visualiser dans une fenêtre à part if e not in l
@+
Bonjour,
Question perte de temps:
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part if not e in l?
Code : Sélectionner tout - Visualiser dans une fenêtre à part if e not in l
@+
Merci d'utiliser le forum pour les questions techniques.
me parait plus logique... car on peut l'écrire comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part if not e in l
Code : Sélectionner tout - Visualiser dans une fenêtre à part if not (e in l)
C'est bien ce que je pense aussi vis à vis de la comparaison booléenne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if not <bool>Pour ce qui est de if not (e in l)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>> l = (1, 2) >>> e = 1 >>> type(e in l) <type 'bool'>
Merci d'utiliser le forum pour les questions techniques.
Pour l'interpréteur cela ne fait aucune différence mais pour le lecteur humain ça sonne plus mieux bien avec if element not in iterable.
La première forme reste claire et correspond plus à ce qui peut se faire dans d'autres langages. À condition de bien comprendre l'ordre dans lequel Python va traduire l'instruction :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (not e) in ls: # erreur d'interprétation humaine possible # ... if not (e in ls): # interprétation humaine correct # ...
Ce n'est que mon avis. Mais en même temps je ne sais toujours pas pourquoi 42, alors je vous laisse juger de ma crédulité...
[QUOTE=PauseKawa;6902021]C'est bien ce que je pense aussi vis à vis de la comparaison booléenne.
Bonjour PauseKawa,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>> l = (1, 2) >>> e = 1 >>> type(e in l) <type 'bool'>
Il est normal de recevoir "type bool" à la question en ligne 3 puisque c'est "la comparaison" qui renvoie Vrai ou Faux selon le résultat. Si (1 est bien dans l, alors la condition est vraie).
Un "Type (e)" renvoie un 'str', 'int', ... selon le formatage de la variable et de son contenu. Idem pour 'l'.
A+
leme parait plus mathématiques , tandis que le
Code : Sélectionner tout - Visualiser dans une fenêtre à part not e in lme semble linguistique, il est parfait pour des littéraires qui se mettent à coder
Code : Sélectionner tout - Visualiser dans une fenêtre à part e not in l
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
Salut,
"not in" est un opérateur en tant que tel.
Qu'on écrive "not z in L" où "z not in L": l’interpréteur générera les mêmes opcodes traduisant "z not in L".
génère les opcodes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def f1(z): if z not in L: pass
sous la forme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 4 0 LOAD_FAST 0 (z) 3 LOAD_GLOBAL 0 (L) 6 COMPARE_OP 7 (not in) 9 POP_JUMP_IF_FALSE 15 5 12 JUMP_FORWARD 0 (to 15) >> 15 LOAD_CONST 0 (None) 18 RETURN_VALUE
on obtient la même chose:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def f2(z): if not z in L: pass
C'est la même chose pour "not z is L" vs. "z is not L": "is not" est aussi un opcode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 8 0 LOAD_FAST 0 (z) 3 LOAD_GLOBAL 0 (L) 6 COMPARE_OP 7 (not in) 9 POP_JUMP_IF_FALSE 15 9 12 JUMP_FORWARD 0 (to 15) >> 15 LOAD_CONST 0 (None) 18 RETURN_VALUE
Ceci dit "not in" et "is not" existent dans l'espoir que les codes soient plus lisibles. Et je pense qu'il est plus lisible de... (dans la plupart des cas).
- W
Bonjour wiztricks,
Merci pour cette réponse "rassurante"
Bonjour,
@wiztricks : J'avais hésité un moment avant de dire dans le sujet que le code est le même pour l’interpréteur au vu de dis au cas ou cela empêche une réponse.
@ll : La question ne porte en effet pas sur le code lui même mais la présentation de celui ci. En fait une application d'import this / du pythonesque à la présentation du code.
Pour ma part je pense que la forme if not <condition> et bien plus proche de l'esprit du langage.
Dans l'attente d'autre avis je vais faire mon yoga
@+
Merci d'utiliser le forum pour les questions techniques.
Je me demande si Python n'as pas lui même donner la réponse...
Code : Sélectionner tout - Visualiser dans une fenêtre à part 6 COMPARE_OP 7 (not in)
Merci d'utiliser le forum pour les questions techniques.
Pour ma part j'utilise toujours la forme not in parce que:
- c'est plus lisible
- je n'arrive jamais à retenir la priorité des opérateurs, et je suis trop fainéant pour vérifier ou pour mettre des parenthèses
Bonjour,
Il me semble que c'est une grande partie de la réponse, l'interprétation du code par Python n'ayant rien a faire de mes états d’âme et l'opérateur not in étant interprété de la même façon (valable aussi pour la comparaison d'identité is not).
Le code étant le même toute considération de performance n'as lieu d’être ici, si ce n'est le fait de devoir ou pas parcourir la collection au complet, soit utiliser in ou pas.
Une autre considération est de savoir s'il est utile ou pas de construire la collection si celle ci n'existe pas.
(or considération not a and a is not None)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 >>> a = 0 >>> b = 1 >>> False in (a, b) True >>> False not in (a, b) False >>> a and b 0
Je pense que cela sera justifié, au final, par Simple is better than complex (on en reviens à la lecture).
Pour moi if not doit être utiliser pour le True/False implicite (if not foo) et not in pour "l'appartenance" (in). Cela reviens a
C'est explicite pour le lecteur (on a notre import this ).
Reste donc vrais dans le cadre booléen mais sa lecture n'est pas équivalente à not in qui implique l'appartenance ou pas.
Je pense que c'est une erreur.
Le coding style Python dit que if a est préférable à if a != None et en bon pythons on applique cela à tour de bras sans prendre en compte le contexte / la lisibilité du code (Readability counts).
En fait ce qui nous parait plus 'mathématique' dans ce cas c'est le booléen implicite, on en oubli le contexte.
De plus l'interprétation de code retrouvant l'opérateur not in dans tous les cas autant l'utiliser directement.
Après cela qu'importe si cela ressemble à du shakespeare si c'est compréhensible/le message passe pour le lecteur/Python ?
Il la comprendras tel que vous lui présenterez, l'erreur venant du programmeur.
La priorité des opérateurs de dividee ne pouvant pas s'appliquer à not in celui ci est préférable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 >>> l = (0, 1, 2) >>> not (0 in l) False >>> (not 0) in l True >>> (not 5) in l True
@+
Merci d'utiliser le forum pour les questions techniques.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager