《深入理解计算机系统》之俺搞来的别人讲解的逻辑短路(汗)【仅为我个人寻找方便,绝无抄袭之意,原网址:https://www.cnblogs.com/an9wer/p/5475551.html】
三元运算操作符 bool ? a : b ,若 bool 为真则 a ,否则为 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
三元运算操作符 bool ? a : b ,若 bool 为真则 a ,否则为 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
example :
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() 的逻辑值为 False,其后到 or 语句为止有三个 and 语句: a() and b() and c() and d(),均被短路。只输出 a(), 得到 a() or e() 为True,输出 e() ,得 e() and F() 为 True ,输出 f(), 其后接 or 语句,则短路其后所有。最终只打印了A E F ok 。(结合我总结的短路逻辑的三点好好理解,应该没问题。)
——————————————————————上述分析错误。
if a() and b() and c() and d() or e() and f() or g() and h():
这个条件 你可以看成:
a() and b() and c() and d()
----> false ,打印Aor
e() and f()
------> true,打印E 和 F,or
g() and h()
------> skip,短路所以综上所述,AEFok。
三者优先级: not > and > or