<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 中的各種下劃線操作你了解嗎?

          共 1663字,需瀏覽 4分鐘

           ·

          2020-08-06 06:32




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

          為什么要這么寫呢?它們都代表什么意思?我們以后如何定義好這些名稱呢?今天就給大家來說一說。

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

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

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

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

          2、你常見的?__xx__

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

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

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

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

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

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

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


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

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

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

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

          所以我們無法重寫原來的 __age:


          我們來打印一下這個(gè) Son 類的屬性:
          可以發(fā)現(xiàn),son 里面的 __age 實(shí)質(zhì)上已經(jīng)變成了 _Son__age。所以你要得到真正重寫的值可以這樣:
          6、一個(gè)下劃線+類名+兩個(gè)下劃線開頭的命名:?_classname__xx

          通過上面第 5 點(diǎn)的解釋,那么還有這么一種命名方式應(yīng)該對(duì)你來說就好理解了:
          你可以這樣去使用它:
          OK,以上就是 Python 中各種下劃線的用法和解釋,希望對(duì)你有幫助。了解這些用法,以后在別的代碼看到就不會(huì)懵了。而且,這些容易忽視的語法細(xì)節(jié),可能是很多面試官熱衷的問題呢!

          作者:小帥b
          來源:學(xué)習(xí)python的正確姿勢(shì)


          _往期文章推薦_

          關(guān)于函數(shù)參數(shù)傳遞,80%人都錯(cuò)了




          瀏覽 22
          點(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>
                  婷婷五月天网 | 一区在线观看免费 | 香蕉社区在线观看 | 亚洲A级黄片 | 粗暴大黑鸡巴视频欧美 |