Maison >développement back-end >Tutoriel Python >Partagez un exemple de tutoriel sur la logique de fonctionnement de et/ou en python
pythonL'idée de base des opérations et et/ou - logique de court-circuit
Commencé En lisant récemment le tutoriel Python de Liao Xuefeng, j'ai l'intention de mettre "apprendre Python à la dure" en premier, car les derniers chapitres me semblent encore un peu difficiles (enfin, je suis trop faible, mais prenez votre temps, une étape à la fois), en y réfléchissant Après avoir lu le tutoriel de Liao Xuefeng, revenez en arrière et vous pourrez peut-être avoir quelques idées.
Bon, revenons au sujet, la raison pour laquelle j'ai écrit ceci aujourd'hui est que l'opération et/ou est apparue dans le chapitre sur les filtres du tutoriel de Liao Xuefeng. Cela n'a pas été mentionné dans le tutoriel précédent. confus quand je l'ai lu pour la première fois, j'étais confus, le code est le suivant :
#把一个序列中的空字符串删掉 1> def not_empty(s): 2> return s and s.strip() 3> 4> filter(not_empty, ['A', '', 'B', None, 'C', ' '])
Plus tard, j'ai vérifié une logique opérationnelle sur et/ou sur Internet, et j'ai ajouté ma propre compréhension, et je l'ai résumé comme suit (je ne sais pas si c'est faux), veuillez me corriger s'il y a des erreurs) :
D'abord. , commençons par les concepts de base. Quels objets en python seront traités comme False ? Et lesquels sont vrais ?
** En Python, Aucun, 0 dans n'importe quel type numérique, chaîne vide "", tuple vide (), liste vide [], dictionnaire vide {} sont traités comme False, et si un type personnalisé implémente le non nul () ou len () et la méthode renvoie 0 ou False, son instance sera également traitée comme False et les autres objets seront True. **
Ce qui suit est l'opération logique la plus simple :
True and True ==> True True or True ==> True True and False ==> False True or False ==> True False and True ==> False False or True ==> True False and False ==> False False or False ==> False
En utilisant les deux points ci-dessus, nous pouvons donner quelques exemples :
>>> a = [0, 1, '' ,3] >>> a[0] and a[1] 0
a[0] = 0, a[1] = 1, donc a[0] et a[1] deviennent 0 et 1 (Faux et Vrai), donc c'est 0 (Faux).
>>> a = [0, 1, '' ,3] >>> a[2] and a[1] ''
Si les deux sont faux en même temps, renvoie la valeur de gauche.
Lorsqu'il y a plus d'un opérateur logique et/ou, l'idée centrale de ses règles de fonctionnement est la logique de court-circuit. D'accord, jetons un coup d'œil à la pensée de court-circuit (mon résumé peut être différent des opinions d'autres personnes sur Internet, veuillez écouter mon analyse lentement) :
ExpressionDe Opération de gauche à droite, si la valeur logique du côté gauche de ou est vraie, toutes les expressions après ou seront court-circuitées et l'expression du côté gauche de ou sera sortie directement.
Les expressions sont évaluées de gauche à droite. Si la valeur logique à gauche de et est False, toutes les expressions suivantes seront court-circuitées jusqu'à ce que ou apparaisse, et l'expression sur le côté gauche de et sera affiché. Allez sur le côté gauche de ou et participez à la prochaine opération logique.
Si le côté gauche de ou est Faux, ou si le côté gauche de et est Vrai, la logique de court-circuit ne peut pas être utilisée.
C'est peut-être un peu abstrait, ce n'est pas grave, donnons ensuite quelques exemples.
Voici une méthode astucieuse qui nous permet de comprendre intuitivement la situation de court-circuit lorsque Python traite ces instructions logiques (je l'ai aussi appris des autres)
Bon, commençons par le simple At au début, supposons qu'il s'agit de toutes les déclarations et ou de toutes les déclarations ou :
1> def a(): 2> print 'A' 3> return [] 4> def b(): 5> print 'B' 6> return [] 7> def c(): 8> print 'C' 9> return 1 10> def d(): 11> print 'D' 12> return [] 13> def e(): 14> print 'E' 15> return 1 16> 17> if a() and b() and c() and d() and e(): 18> print 'ok' #显示结果如下 A
La valeur logique de a() est False, suivie des déclarations et, toutes courtes- circuité, renvoie enfin l'expression de a().
1> def a(): 2> print 'A' 3> return 1 4> def b(): 5> print 'B' 6> return 1 7> def c(): 8> print 'C' 9> return [] 10> def d(): 11> print 'D' 12> return [] 13> def e(): 14> print 'E' 15> return 1 16> 17> if a() and b() and c() and d() and e(): 18> print 'ok' #显示结果如下 A B C
La valeur logique de a() est True et ne peut pas être court-circuitée. Après cela, il effectue une opération logique avec b() et renvoie la valeur logique. True de b(), qui est identique à c() effectue des opérations logiques et renvoie la valeur logique False de c(). Si toutes sont suivies d'instructions and, elles sont toutes court-circuitées et l'expression de c() est. est finalement revenu.
1> def a(): 2> print 'A' 3> return 1 4> def b(): 5> print 'B' 6> return [] 7> def c(): 8> print 'C' 9> return 1 10> def d(): 11> print 'D' 12> return [] 13> def e(): 14> print 'E' 15> return 1 16> 17> if a() or b() or c() or d() or e(): 18> print 'ok' #显示结果如下 A ok
La valeur logique de a() est True, suivie des instructions or, toutes court-circuitées, et enfin l'expression de a() est renvoyée.
1> def a(): 2> print 'A' 3> return [] 4> def b(): 5> print 'B' 6> return [] 7> def c(): 8> print 'C' 9> return 1 10> def d(): 11> print 'D' 12> return [] 13> def e(): 14> print 'E' 15> return 1 16> 17> if a() or b() or c() or d() or e(): 18> print 'ok' #显示结果如下 A B C ok
La valeur logique de a() est True et ne peut pas être court-circuitée. Ensuite, effectuez une opération logique avec b() et renvoyez la valeur logique False de. b(), qui est identique à c(), effectue des opérations logiques et renvoie la valeur logique True de c(). Si toutes sont suivies d'instructions ou, alors elles sont toutes court-circuitées et l'expression de c() est finalement. est revenu.
Parlons maintenant de la situation où les déclarations et et ou coexistent :
1> def a(): 2> print 'A' 3> return [] 4> def b(): 5> print 'B' 6> return [] 7> def c(): 8> print 'C' 9> return 1 10> def d(): 11> print 'D' 12> return [] 13> def e(): 14> print 'E' 15> return 1 16> def f(): 17> print 'F' 18> return 1 19> def g(): 20> print 'G' 21> return [] 22> def h(): 23> print 'H' 24> return 1 25> 26> if a() and b() and c() and d() or e() and f() or g() and h(): 27> print 'ok' #输出结果如下: A E F ok
Ne pensez pas que la déclaration est trop long C'est difficile. Analysons-le attentivement. Tout d'abord, la valeur logique de a() est False, puis il y a trois instructions and jusqu'à l'instruction or : a() et b() et c() et d(). , qui sont tous court-circuités. Si a() ou e() est True, affichez e(). Si e() et F() sont True, affichez f(). Si elles sont suivies d'une instruction ou, toutes les instructions suivantes seront court-circuitées. (Avec une bonne compréhension des trois points de la logique de court-circuit que j'ai résumé, il ne devrait y avoir aucun problème.)
Avant python2.5, python n'avait pas d'opérateur ternaire. Guido Van Rossum pensait que cela n'aidait pas python à devenir plus concis, mais les programmeurs habitués à la programmation C, C++ et Java ont essayé d'utiliser et ou ou de simuler. l'opérateur ternaire, et cela utilise la logique de court-circuit de python.
Opérateur d'opération ternaire bool ? a : b , si bool est vrai, alors a , sinon b .
转化为 python 语言为:
bool and a or b
如何理解呢? 首先 a , b 都为真,这是默认的。如果 bool 为真, 则 bool and a 为真,输出 a ,短路 b 。如果 bool 为假,短路 a,直接 bool or b ,输出 b 。
换一种更简单的写法:
return a if bool else b
【相关推荐】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!