<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 中各種下劃線的騷操作:_、_xx、xx_、__xx、__xx__、_classname_

          共 1629字,需瀏覽 4分鐘

           ·

          2020-09-07 05:12

          作者 | 小帥b
          來(lái)源 |?學(xué)習(xí)python的正確姿勢(shì)


          我們?cè)诙x一些變量或者方法的時(shí)候,常常會(huì)用到下劃線,在 Python 中,下劃線可是很有用處的喲,比如變量,有些是一個(gè)下劃線開(kāi)頭的(_xx),有些是兩個(gè)下劃線開(kāi)頭的(__xx),有些是在名稱的結(jié)尾添加下劃線的(xx_),還有一些方法我們常常看到兩個(gè)下劃線開(kāi)頭和結(jié)尾的(__xx__) 等等…

          為什么要這么寫(xiě)呢?它們都代表什么意思?我們以后如何定義好這些名稱呢?


          1、只有一個(gè)下劃線(_)是干嘛的呢?

          在 Python 解釋器里面,對(duì)單個(gè)下劃線是有特殊的 “感情” 的,我來(lái)給你舉個(gè)例子:
          仔細(xì)看你會(huì)發(fā)現(xiàn),_ 是有值的,這是因?yàn)樵?Python 解釋器里面, _ 會(huì)指向你最后一次執(zhí)行的表達(dá)式。這在我們使用 Python 交互的時(shí)候常常會(huì)用到。

          除此之外,我們還可以使用單個(gè)下劃線來(lái)格式化變量的值,比如金額:
          通過(guò)這樣的表現(xiàn),我們能更加易讀, Python 也知道我們?cè)诒硎臼裁础?/section>

          再者,單個(gè)下劃線還可以使用在循環(huán)語(yǔ)句中:


          2、你常見(jiàn)的?__xx__

          這種以兩個(gè)下劃線開(kāi)頭和結(jié)尾的命名方式,我想應(yīng)該是你最常見(jiàn)到的了,比如我們之前說(shuō)的類的初始化方法:
          其實(shí)這些,我們叫它們?yōu)?“魔法函數(shù)” ,也就是說(shuō),它是 Python 內(nèi)置好了的,我們可以直接拿來(lái)使用。所以你應(yīng)該盡量避免做這樣類似的以兩個(gè)下劃線開(kāi)頭和結(jié)尾的方式去命名。


          3、單個(gè)下劃線開(kāi)頭的?_xx

          以單個(gè)下劃線開(kāi)頭命名的方法或者變量,就是說(shuō)明它是僅提供內(nèi)部使用的。

          舉一個(gè)例子,我們來(lái)創(chuàng)建一個(gè)模塊(handsomeb.py),然后在里面創(chuàng)建兩個(gè)方法,一個(gè)以單個(gè)下劃線開(kāi)頭命名,一個(gè)不以單個(gè)下劃線開(kāi)頭命名:
          接著我們?nèi)ヒ眠@個(gè)模塊,分別執(zhí)行模塊中的方法:
          當(dāng)我們?nèi)?zhí)行 my_func() 輸出 fxxkpython ,沒(méi)毛病吧:
          但是當(dāng)我們?nèi)?zhí)行 _my_func() 的時(shí)候就不行了:
          這時(shí)候它告訴我們 _my_func 沒(méi)有定義,它只能被模塊內(nèi)部使用。


          4、單個(gè)下劃線結(jié)尾的?xx_

          我們知道, Python 有許多關(guān)鍵詞,比如 def、return、calss、pass 這些,它們都是有特殊的意義的,所以我們?cè)诙x變量或者方法的時(shí)候,不可以用它們來(lái)命名的,比如這樣是錯(cuò)誤的:
          那么如果我們死都要這樣定義名稱呢?為了區(qū)分,在它們的后面添加一個(gè)下劃線:
          但是小帥b不建議這樣命名,有那么多名稱,何必去定義關(guān)鍵詞相關(guān)的名稱呢。


          5、兩個(gè)下劃線開(kāi)頭的命名:?__xx

          這種命名的方式更多的是用在類的繼承,通過(guò)兩個(gè)下劃線開(kāi)頭命名的成員,可以防止被子類重寫(xiě)。

          我們來(lái)寫(xiě)一個(gè)這樣的 Person 類:
          可以看到,在 Person 這個(gè)類里面,有兩個(gè)變量,一個(gè)是 name ,一個(gè)是 age。不過(guò) age 是以兩個(gè)下劃線開(kāi)頭命名了。

          當(dāng)我們?nèi)?shí)例化這個(gè) Person 的時(shí)候,發(fā)現(xiàn) name 可以正常訪問(wèn),但是 __age 無(wú)法訪問(wèn)了。

          我們來(lái)打印一下這個(gè)對(duì)象的屬性:
          仔細(xì)看,name 還是 name, 但是 __age 變成了 _Person__age。

          所以我們無(wú)法重寫(xiě)原來(lái)的 __age:
          我們來(lái)打印一下這個(gè) Son 類的屬性:
          可以發(fā)現(xiàn),son 里面的 __age 實(shí)質(zhì)上已經(jīng)變成了 _Son__age。所以你要得到真正重寫(xiě)的值可以這樣:



          6、一個(gè)下劃線+類名+兩個(gè)下劃線開(kāi)頭的命名:?_classname__xx

          通過(guò)上面第 5 點(diǎn)的解釋,那么還有這么一種命名方式應(yīng)該對(duì)你來(lái)說(shuō)就好理解了:

          你可以這樣去使用它:

          ok,以上就是 Python 中各種下劃線的用法和解釋,希望對(duì)你有幫助,如果你看一遍之后有點(diǎn)懵,那就再看幾遍吧。當(dāng)你把別人忽略的東西掌握起來(lái),你就比他們牛逼了。
          瀏覽 55
          點(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>
                  九九色网址 | 操逼电影网址 | 久久亚洲成人 | 久久久77777 | 五月婷婷婷婷婷婷 |