<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】if name == '__main__'究竟有什么作用?

          共 2467字,需瀏覽 5分鐘

           ·

          2022-11-01 12:34

          1前言

          在很多的源碼中,我們經(jīng)常可以看到有一句話

          if __name__ == '__main__':

          但是我們?cè)谶\(yùn)行的時(shí)候,又會(huì)發(fā)現(xiàn)把這句話刪掉的時(shí)候卻又不影響代碼的執(zhí)行,那為什么要加這么一句話呢?

          本文將進(jìn)一步介紹“if name == '__main__'”這命令的含義,以及在實(shí)際項(xiàng)目中如何應(yīng)用。

          2__name__的作用

          python的變量中,分別有單下劃線_xxx,雙下劃線__xxx,以及變量前后均有雙下劃線__xxx__

          系統(tǒng)定義名字,一般前后均有一個(gè)“雙下劃線”來代表python里特殊方法專用的標(biāo)識(shí),如__init__0代表類的構(gòu)造函數(shù)。類似__xxx__這樣的變量一般是特殊變量,可以被直接引用,但是有特殊用途,而__name__就是這樣一個(gè)特殊變量,它是python的一個(gè)內(nèi)置類屬性,它天生就存在于一個(gè) python 程序中。

          1.當(dāng)我們直接運(yùn)行python程序時(shí),程序的__name__就是等于'__main__'

          有程序腳本“A.py”,代碼如下,

          def myfun1():
              print('從A中調(diào)用myfun1')
              print('A_name:', __name__)

          myfun1()

          直接執(zhí)行代碼,得到結(jié)果輸出:

          image-20220618195714681

          2.當(dāng)我們運(yùn)行python程序?qū)肫渌?py文件時(shí),導(dǎo)入其他文件的__name__就是等于模塊名

          除A.py外,我們有另一腳本run_code.py,我們使用它來調(diào)用A.py,此處我們直接import A即可

          import A

          我們看看輸出:

          image-20220618220705785

          可以看到輸出的形式基本就是一致的,但不一樣的是__name__不再等于'__main__'而是為文件名字“A”。

          3 if __name__=='__main__'在項(xiàng)目的應(yīng)用

          值得注意的是,我們剛剛并沒有使用A.py中的函數(shù),只是import,python也會(huì)輸出結(jié)果。讓我們?cè)俅位仡櫸覀兊膬蓚€(gè)腳本:

          A.py

          def myfun1():
              print('從A中調(diào)用myfun1')
              print('A_name:', __name__)

          myfun1()

          run_code.py

          import A

          實(shí)際上,即使我們import A,同樣也會(huì)把A的腳本執(zhí)行。那么,如果我們?cè)趓un_code.py腳本中調(diào)用函數(shù)會(huì)得到什么結(jié)果?我們把run_code.py修改如下:

          import A

          print('從run_code中調(diào)用myfun1')
          A.myfun1()

          輸出結(jié)果如下:

          image-20220618221205979

          接下來,我們分析每個(gè)輸出的出處。

          第一句及第二句輸出,是由于import A過程中,執(zhí)行A.py腳本中的“myfun1()”函數(shù)得到的,所以得到:

          從A中調(diào)用myfun1
          A_name: A

          第三句輸出,則是run_code.py腳本中的命令“print('從run_code中調(diào)用myfun1')”得到的輸出

          從run_code中調(diào)用myfun1

          第四句及第五句輸出,則是從run_code.py腳本中的命令“A.myfun1()”執(zhí)行A中的“myfun1()”函數(shù)得到的輸出

          從A中調(diào)用myfun1
          A_name: A

          實(shí)際上,A.py這個(gè)文件本來只是一個(gè)函數(shù)文件,A.py中“myfun1()”這個(gè)命令,是我們?cè)谧珜戇@個(gè)函數(shù)的時(shí)候的測(cè)試命令,那么這就產(chǎn)生一個(gè)問題,當(dāng)我們?cè)谄渌绦蛑姓{(diào)用這個(gè)模塊的時(shí)候,這一句測(cè)試內(nèi)容就會(huì)被打印出來。

          我們當(dāng)然可以把上面的測(cè)試語句刪除,但是一般情況下,我們后續(xù)可能還會(huì)對(duì)原始的代碼進(jìn)行修改,那么修改后,這些測(cè)試代碼又要重新被添加上,那么就顯得有點(diǎn)麻煩了。

          那么在這種情況下,我們就可以在這些測(cè)試代碼前加上:

          if __name__ == '__main__':

          根據(jù)我們前面討論__name__的特性,就可以使得我們?cè)跍y(cè)試的時(shí)候,運(yùn)行測(cè)試語句,而當(dāng)我們調(diào)用的時(shí)候,不再運(yùn)行這些測(cè)試語句。

          我們對(duì)A.py進(jìn)行改寫:

          def myfun1():
              print('從A中調(diào)用myfun1')
              print('A_name:', __name__)

          #myfun1()

          if __name__ == '__main__':#當(dāng)作為模塊被導(dǎo)入時(shí),不執(zhí)行
              myfun1()

          執(zhí)行輸出結(jié)果有:

          image-20220618222222096

          run_code.py不用修改?,F(xiàn)在,我們?cè)賵?zhí)行run_code.py

          image-20220618222253868

          可以發(fā)現(xiàn),測(cè)試的語句已經(jīng)沒有再被輸出了。

          4 總結(jié)

          初始接觸python的時(shí)候,我們往往困惑“if name == '__main__'”這句似乎沒有任何作用的語句為什么要加上去。但是相信經(jīng)過上面的講解,大家也對(duì)python的模塊管理有了更深刻的認(rèn)識(shí),也明白在實(shí)際使用中,我們?cè)撊绾芜\(yùn)用“if name == '__main__'”這個(gè)語句了。

          剛接觸Python,練習(xí)編寫的程序/模塊通常是直接運(yùn)行,該語句沒有起到實(shí)質(zhì)性的作用。因此會(huì)對(duì)其作用有些困惑。有模塊的概念,自己嘗試做一些模塊封裝,就會(huì)很好理解了。


          3.使用watch窗口添加關(guān)注變量

          往期精彩回顧




          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  久久久久久中文字幕 | 亚洲国产精品久久久久 | 看美女日逼 | 一级片黄色电影免费 | 亚洲无码性爱 |