乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【Python 第51課】 and

       一利陽光故事會 2020-02-24

      【Python 第51課】 and-or技巧

      今天介紹一個python中的小技巧:and-or

      看下面這段代碼:

      1.  a = "heaven"

      2.  b = "hell"

      3.  c = True and a or b

      4.  print c

      5.  d = False and a or b

      6.  print d

      輸出:
      heaven
      hell

      結(jié)果很奇怪是不是?
      表達(dá)式從左往右運(yùn)算,1和"heaven"做and的結(jié)果是"heaven",再與"hell"做or的結(jié)果是"heaven";0和"heaven"做and的結(jié)果是0,再與"hell"做or的結(jié)果是"hell"。
      拋開繞人的and和or的邏輯,你只需記住,在一個bool and a or b語句中,當(dāng)bool條件為真時,結(jié)果是a;當(dāng)bool條件為假時,結(jié)果是b。
      有學(xué)過c/c++的同學(xué)應(yīng)該會發(fā)現(xiàn),這和bool?a:b表達(dá)式很像。

      有了它,原本需要一個if-else語句表述的邏輯:

      1.  if a > 0:

      2.      print "big"

      3.  else:

      4.      print "small"

      就可以直接寫成:

      1.  print (a > 0) and "big" or "small"

      2.   

      然而不幸的是,如果直接這么用,有一天你會踩到坑的。和c語言中的?:表達(dá)式不同,這里的and or語句是利用了python中的邏輯運(yùn)算實現(xiàn)的。當(dāng)a本身是個假值(如0,"")時,結(jié)果就不會像你期望的那樣。

      比如:

      1.  a = ""

      2.  b = "hell"

      3.  c = True and a or b

      4.  print c

      得到的結(jié)果就是"hell"。因為""和"hell"做and的結(jié)果是"hell"。

      所以,and-or真正的技巧在于,確保a的值不會為假。最常用的方式是使 a 成為 [a] 、 b 成為[ b ] ,然后使用返回值列表的第一個元素:

      1.  a = ""

      2.  b = "hell"

      3.  c = (True and [a] or [b])[0]

      4.  print c

      由于[a]是一個非空列表,所以它決不會為假。即使a是0或者''或者其它假值,列表[a]也為真,因為它有一個元素。

      在兩個常量值進(jìn)行選擇時,and-or會讓你的代碼更簡單。但如果你覺得這個技巧帶來的副作用已經(jīng)讓你頭大了,沒關(guān)系,用if-else可以做相同的事情。不過在python的某些情況下,你可能沒法使用if語句,比如lambda函數(shù)中,這時候你可能就需要and-or的幫助了。

      什么是lambda函數(shù)?呵呵,這是python的高階玩法,暫且按住不表,以后有機(jī)會再說。          

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多