亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于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

正在回答

2 回答

總的來說,這種不清不楚的執行順序問題,我們考慮的是多加括號...不然寫奇奇怪怪的代碼容易被打死

短路是這樣的,

  1. f1 and f2 and f3, 當出現第一個 false 后,后面的and 就不走

  2. 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


0 回復 有任何疑惑可以回復我~
#1

love__study 提問者

非常感謝!
2018-08-23 回復 有任何疑惑可以回復我~

是不是這樣理解, f()的返回值是false,所以造成不了短路,所以f() or h()返回值不管是ture 還是 false,都會顯示出來。。

是這樣的理解嗎?

0 回復 有任何疑惑可以回復我~
#1

love__study 提問者

剛才思考了下,似乎也不對。f()的返回值是ture 所以造成不了短路,f() and g()的結果主要看g()的返回值,所以結果取g(),而同樣g() and h()的返回值主要看h,所以取h的值。 剛剛上面的寫錯了,不是“f() or h()”而是“g() or h()” 不知道我想的對不對
2018-08-20 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758397    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

關于python短路運算的小問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號