<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__、_classn...

          共 1663字,需瀏覽 4分鐘

           ·

          2020-02-08 23:23


          我們在定義一些變量或者方法的時候,常常會用到下劃線,在 Python 中,下劃線可是很有用處的喲,比如變量,有些是一個下劃線開頭的(_xx),有些是兩個下劃線開頭的(__xx),有些是在名稱的結(jié)尾添加下劃線的(xx_),還有一些方法我們常常看到兩個下劃線開頭和結(jié)尾的(__xx__) 等等…
          為什么要這么寫呢?它們都代表什么意思?我們以后如何定義好這些名稱呢?那么接下來就是:


          學(xué)習(xí) Python 的正確姿勢
          d083c42606607dcd1661a10062aeee07.webp

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

          在 Python 解釋器里面,對單個下劃線是有特殊的 “感情” 的,我來給你舉個例子:


          8288cf1f30997360b0ecb405de7e5912.webp




          仔細(xì)看你會發(fā)現(xiàn),_ 是有值的,這是因?yàn)樵?Python 解釋器里面, _ 會指向你最后一次執(zhí)行的表達(dá)式。這在我們使用 Python 交互的時候常常會用到。

          除此之外,我們還可以使用單個下劃線來格式化變量的值,比如金額:


          2816d763d183a5088ce87ab9f9dd70e8.webp




          通過這樣的表現(xiàn),我們能更加易讀, Python 也知道我們在表示什么。

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


          a6f4c59cab11ca4b97bc41a5643484f9.webp




          2、你常見的?__xx__

          這種以兩個下劃線開頭和結(jié)尾的命名方式,我想應(yīng)該是你最常見到的了,比如我們之前說的類的初始化方法:


          e55f370f8cf3bb35386d2cadaeeb73a1.webp




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

          3、單個下劃線開頭的?_xx

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

          舉一個例子,我們來創(chuàng)建一個模塊(handsomeb.py),然后在里面創(chuàng)建兩個方法,一個以單個下劃線開頭命名,一個不以單個下劃線開頭命名:


          578fe1c6dccafa8a49603a0b89a174bb.webp




          接著我們?nèi)ヒ眠@個模塊,分別執(zhí)行模塊中的方法:


          515be885dc7f1013ca4e09a1421d3cd2.webp




          當(dāng)我們?nèi)?zhí)行 my_func() 輸出 fxxkpython ,沒毛病吧:


          9833ea7a9a15ec01ae8319775a72f042.webp




          但是當(dāng)我們?nèi)?zhí)行 _my_func() 的時候就不行了:


          dbb28714cd06daec524b8ab5ae7b5913.webp




          這時候它告訴我們 _my_func 沒有定義,它只能被模塊內(nèi)部使用。

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

          我們知道, Python 有許多關(guān)鍵詞,比如 def、return、calss、pass 這些,它們都是有特殊的意義的,所以我們在定義變量或者方法的時候,不可以用它們來命名的,比如這樣是錯誤的:


          99a19ed9378488ed8132d40acb7e84bd.webp




          那么如果我們死都要這樣定義名稱呢?為了區(qū)分,在它們的后面添加一個下劃線:


          faecb1efd1d3e8bef5661f20d8716350.webp




          但是小帥b不建議這樣命名,有那么多名稱,何必去定義關(guān)鍵詞相關(guān)的名稱呢。

          5、兩個下劃線開頭的命名:?__xx
          這種命名的方式更多的是用在類的繼承,通過兩個下劃線開頭命名的成員,可以防止被子類重寫。
          我們來寫一個這樣的 Person 類:


          a7b6993e7fc7e6c370619815e6f6fdb5.webp



          可以看到,在 Person 這個類里面,有兩個變量,一個是 name ,一個是 age。不過 age 是以兩個下劃線開頭命名了。
          當(dāng)我們?nèi)?shí)例化這個 Person 的時候,發(fā)現(xiàn) name 可以正常訪問,但是 __age 無法訪問了。
          我們來打印一下這個對象的屬性:


          b2bb5eb29191d23e6be2f9f82f3b3091.webp



          仔細(xì)看,name 還是 name, 但是 __age 變成了 _Person__age。
          所以我們無法重寫原來的 __age:


          0372adf8360daf2c5ff73b71907d828c.webp



          我們來打印一下這個 Son 類的屬性:


          65615419ea82ff4258ac785f0d0aee05.webp



          可以發(fā)現(xiàn),son 里面的 __age 實(shí)質(zhì)上已經(jīng)變成了 _Son__age。所以你要得到真正重寫的值可以這樣:


          dfa30be2b85fba84acd12de30440023b.webp



          6、一個下劃線+類名+兩個下劃線開頭的命名:?_classname__xx
          通過上面第 5 點(diǎn)的解釋,那么還有這么一種命名方式應(yīng)該對你來說就好理解了:


          661c243bad7b46c4a77fb85b97e711a8.webp



          你可以這樣去使用它:


          c6c1c685c7e45798dccea2804df99054.webp



          ok,以上就是 Python 中各種下劃線的用法和解釋,希望對你有幫助,如果你看一遍之后有點(diǎn)懵,那就再看幾遍吧。當(dāng)你把別人忽略的東西掌握起來,你就比他們牛逼了。
          ps: 如果你對 Python 這些騷操作感興趣,不妨了解一下小帥b的私密干貨:帥帥的 vip?,以上這一篇只是其中的一小篇 “甜點(diǎn)”,那么我們下回見咯,peace!
          相關(guān):Python 被低估了的 10 個小技巧
          Pycharm 被低估了的 10 個快捷鍵
          這幾個 Pycharm 插件能讓你擼代碼擼到高潮


          讓我知道
          你正在看
          瀏覽 65
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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片在线看 | 日韩三级片网 |