<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在Python中妙用短路機制

          共 1586字,需瀏覽 4分鐘

           ·

          2022-02-18 01:56

          添加微信號"CNFeffery"加入技術(shù)交流群

          ?

          本文完整示例代碼及文件已上傳至我的Github倉庫https://github.com/CNFeffery/PythonPracticalSkills

          ?

          這是我的系列文章「Python實用秘技」的第5期,本系列立足于筆者日常工作中使用Python積累的心得體會,每一期為大家?guī)硪粋€幾分鐘內(nèi)就可學(xué)會的簡單小技巧。

          作為系列第5期,我們即將學(xué)習(xí)的是:Python中短路機制的妙用。

          不同于物理學(xué)中的「短路」Short circuit)那般危險,Python中的短路機制非常有用,跟很多其他編程語言中的短路機制作用類似,一句話概括就是一段條件判斷表達式在從左到右按順序執(zhí)行的過程中,提前確定了表達式的True/False結(jié)果,從而終止右邊剩余的運算。

          讓我們通過幾個簡單的例子總結(jié)Python中可用的幾種短路機制:

          • X or Y

          X or Y是最常用的短路機制,我們都知道只要XY中至少有一個為True時,整段判斷表達式就為True,譬如下面的例子中,本來1 / 0會觸發(fā)ZeroDivisionError: division by zero錯誤,但因為or左邊的部分已經(jīng)邏輯判斷為True,Python的短路機制就會停止后續(xù)的執(zhí)行,直接返回or左邊的結(jié)果:

          而當(dāng)or左邊部分邏輯判斷為False時,則會返回右邊部分的結(jié)果:

          • X and Y

          類似X or Y的機制,X and Y會在X邏輯判斷為False時提前終止后續(xù)的運算,只返回X部分的結(jié)果:

          • any()

          Python中的any()函數(shù)用于接受序列形式的多個等待邏輯判斷的部分,并在序列中至少有一個部分邏輯判斷為True時返回True

          而只要any()按順序遇到第一個邏輯判斷為True的結(jié)果,也會觸發(fā)短路,正如下面的例子中只花費3秒就完成了判斷過程,因為循環(huán)到1時觸發(fā)了短路:

          • all()

          Python中的all()函數(shù)類似any(),會在傳入序列中每個部分邏輯判斷均為True時返回True,其也會在按順序遇到第一個False時終止后續(xù)運算:

          • 「比較運算符」

          Python中用于數(shù)值大小比較的各個運算符也具有短路機制,從左到右,一旦執(zhí)行到判斷結(jié)果為False的部分都會終止運算:

          • 「實際使用示例」

          當(dāng)我們的代碼中涉及到條件判斷,且參與條件判斷的值具有一定的「運算成本」時,就可以靈活運用短路機制來提升運行效率,譬如我們需要根據(jù)用戶id信息向多個接口查詢其權(quán)限,全部滿足時將其標記為“超級權(quán)限”,就可以利用到短路機制。

          這里我們隨意寫幾個具有時間成本的函數(shù)作為接口示意:

          def?api1(id_):
          ????
          ????time.sleep(1)
          ????
          ????return?id_?in?['admin1',?'admin2']

          def?api2(id_):
          ????
          ????time.sleep(1)
          ????
          ????return?id_?in?['admin1',?'admin2',?'su1',?'su2']

          def?api3(id_):
          ????
          ????time.sleep(1)
          ????
          ????return?id_?not?in?['ban1',?'ban2',?'ban3']

          利用短路機制在用戶第一次沒有滿足條件時就終止后續(xù)判斷,寫法簡潔:


          本期分享結(jié)束,咱們下回見~??

          加入知識星球【我們談?wù)摂?shù)據(jù)科學(xué)】

          400+小伙伴一起學(xué)習(xí)!








          · 推薦閱讀?·

          盤點2021最佳數(shù)據(jù)可視化作品

          「Python實用秘技04」pdf文件批量添加文字水印

          新一代Python包管理工具來了


          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天摸天天干天天操 | 蜜桃久久久久 | 久久综合97 | 国产 丝袜 人妻 制服 一区 | 2025精品偷拍视频 |