關于python短路運算的小問題
def a():
? ? print "A"
? ? return []
def b():
? ? print "B"
? ? return []
def c():
? ? print "C"
? ? return 1
def d():
? ? print "D"
? ? return[]
def e():
? ? print "E"
? ? return 1
def f():
? ? print"F"
? ? return 1
def g():
? ? print "G"
? ? return []
def h():
? ? print "H"
? ? return 1
if a() and b() and c() and d() or e() and f() and g() or h():
? ? print "OK"
為什么返回是的A E F G H OK
而不是 A E F H OK
2018-08-22
短路是這樣的,
f1 and f2 and f3, 當出現第一個 false 后,后面的and 就不走
f1 or f2 or f3,當出現第一個 true 后,后面的 or 就不走
綜上,我們不管 輸不輸出 ok,先看走的順序:
a() and b() and c() and d() or e() and f() and g() or h():
從做到右,a() 為false,則 bcd不走,到達e()為true, 后面沒有 or,所以f()走,f為true所以g()要走, 后面為 or 所以 h()要走,?
即輸出為: AEFGH
2018-08-20
是不是這樣理解, f()的返回值是false,所以造成不了短路,所以f() or h()返回值不管是ture 還是 false,都會顯示出來。。
是這樣的理解嗎?