python 中各种下划线的神操作:_、_xx、xx_、__xx__、_ _xx、_classname_ _xx
文章目錄
- 1、只有一個下劃線(_)
- 2、單個下劃線開頭的(_xx)
- 3、單個下劃線結尾的(xx_)
- 4、兩個下劃線開頭和結尾的 "_ _ _xx_ _ _"
- 5、兩個下劃線開頭的命名 _ _xx
- 6、一個下劃線+類名+兩個下劃線開頭的命名(_classname _ _xx)
通常情況下,python中定義一些變量或者方法的時候,會使用到下劃線。這些下劃線只是簡單的一種編碼規約么?一開始僅認為是編程風格的規約,后來了解到這些下劃線都是很講究的。什么情況下該使用哪種下劃線,不同的下劃線有什么意義,等等。接下來就介紹一下以下劃線命名的各種變量正確使用姿勢。
1、只有一個下劃線(_)
①先來看一個例子:
通過上面的例子,我們不難發現,當我輸入一個下劃線時,會有返回值。
其實在python解析器里,單個下劃線(_)本身就是有值的。這是因為它會指向你最后一次執行的表達式,所以當我前面已經有過表達式的計算了,后面再輸入下劃線時會返回最近一次表達式的值。這在我們使用python交互的時候會常常用到。
②可以使用單個下劃線來格式化變量的值,比如下面的例子:
通過這樣的方式定義變量,增加代碼的可讀性,而且python解析器也知道我們在做什么,解析的時候并不會出現錯誤。
③此外,單個下劃線還可以使用在循環語句中,比如:
2、單個下劃線開頭的(_xx)
以單個下劃線開頭命名的變量或者方法,說明是僅在本模塊內部使用。
比如下面的例子:
不帶下劃線的my_func() 方法能被調用,而帶下劃線的已經報錯了,未定義,說明它只能被test1模塊內部使用。
3、單個下劃線結尾的(xx_)
作為一個開發者,我們都知道python中有很多關鍵字,比如def、class、pass等,這些關鍵字都是有特殊意義的,所以我們在定義變量或者方法的時候要避免使用關鍵字(其他編程語言也是一樣的)。但如果非要使用關鍵字來定義變量,為了區分關鍵字本身的意義,我們可以在它們的后面加上一個下劃線。比如下面的例子:
輸出結果為:
但不建議這樣命名。避免使用關鍵字定義變量名,有那么多名稱可以使用,何必使用關鍵字找麻煩呢。
4、兩個下劃線開頭和結尾的 “_ _ xx _ _”
這種方式是最常見的了,python中很多內置的方法都是這樣定義的。
對于這些python內置好的方法,叫它們為“魔法函數”,我們可以直接拿來使用。所以自己在定義函數的時候,不建議使用這種類似的兩個下劃線開頭和結尾的方法命名。
5、兩個下劃線開頭的命名 _ _xx
這種方式更多的是用在類的繼承上。通過兩個下劃線開頭命名的成員變量,可以防止被子類重寫。
比如下面的例子:
通過輸出結果可以看到,當實例化Person類的時候,成員變量name可以正常訪問,但是 _ _age就不能訪問了。
打印觀察對象的屬性:
輸出結果不難發現,對象的屬性name沒有變,而 _ _age已經變成了 _Person__age,變成了Person類私有的屬性。
接下來再寫一個Son類,來繼承Person類:
通過輸出的結果可以發現,子類可以重寫父類的name屬性,但是不能重寫_ _age屬性。
打印觀察Son對象的屬性:
可以發現son對象里面的 _ _age 實際上已經變成了 _Son _ _age,變成son對象的私有屬性了。
所以要想真正得到重寫的age值,可以使用son對象的屬性:
6、一個下劃線+類名+兩個下劃線開頭的命名(_classname _ _xx)
類似于上面的5,可以使用這種方式給變量命名:_Person _ _name="nvwang" 。 可以這樣使用: _Person__name="nvWang" class Person:def print_name(self):return __namenvWang=Person() print(nvWang.print_name())上面👆就是關于Python中下劃線的使用方式,下面👇是一個簡單的總結,希望對您有所幫助🌹
總結
以上是生活随笔為你收集整理的python 中各种下划线的神操作:_、_xx、xx_、__xx__、_ _xx、_classname_ _xx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: from import 导入时找不到mo
- 下一篇: MySQL数据类型和Java数据类型对应