單行注釋?zhuān)? + 空格 + 注釋
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括富民網(wǎng)站建設(shè)、富民網(wǎng)站制作、富民網(wǎng)頁(yè)制作以及富民網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,富民網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到富民省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
語(yǔ)句后注釋?zhuān)簝蓚€(gè)空格 + # + 空格 + 注釋
PyCharm在定義函數(shù)之前空兩行,使用函數(shù)之前空兩行來(lái)消除下劃線(xiàn)
4、字典
冒號(hào)后加一個(gè)空格去除下劃線(xiàn)
單下劃線(xiàn)和雙下劃線(xiàn)在Python變量、類(lèi)、模塊命名中都有不懂的含義,名稱(chēng)中都各有其含義。有一些是程序員之間約定俗成的,Python解釋器不用強(qiáng)制其執(zhí)行,但有些Python解釋器會(huì)強(qiáng)制執(zhí)行。
本文從以下幾種不同使用方式,對(duì)下劃線(xiàn)的用途和含義進(jìn)行說(shuō)明:
1)變量
通常用于類(lèi)內(nèi)部變量的命名,表明該變量是該類(lèi)私用變量,外部不要去訪(fǎng)問(wèn)它,但也是可以訪(fǎng)問(wèn)到的。這只是程序員之間的一個(gè)約定俗成的做法,Python解釋器本身不會(huì)對(duì)它進(jìn)行限制。
我們創(chuàng)建一個(gè)類(lèi):
實(shí)例化A,并訪(fǎng)問(wèn)它的變量,aa._bar 也是可以訪(fǎng)問(wèn)的,但既然人家這么命名了,外部最好不要去訪(fǎng)問(wèn)了
2)函數(shù)和模塊
和變量一樣,這是一個(gè)私有函數(shù),不建議外部程序調(diào)用該函數(shù)。
我們創(chuàng)建一個(gè)腳本aa.py, 里面有2個(gè)函數(shù) _aa,bb:
導(dǎo)入aa,分別調(diào)用函數(shù) _aa和bb,bb 可以調(diào)用,但顯示無(wú) _aa
3)類(lèi)
同變量和函數(shù)一樣,都是私有變量,外部最好不要調(diào)用
用來(lái)避免和Python內(nèi)置函數(shù)命名產(chǎn)生沖突,PEP8解釋了這個(gè)約定。
如class或def不能用作Python中的變量名稱(chēng),如果之間用,會(huì)提示錯(cuò)誤。如果你非要用它,可以 使用 class_或 def_。
還有一些函數(shù)名,如chr,chr()是Python內(nèi)置函數(shù),用來(lái)表示ascii碼對(duì)應(yīng)的字符他的輸入時(shí)數(shù)字,可以用十進(jìn)制,也可以用十六進(jìn)制。如果你非要它來(lái)表示染色體,可以用chr_來(lái)代替。當(dāng)然如果你直接使用它作為變量名,它也不會(huì)報(bào)錯(cuò),但最好不要這樣使用。
在python中定義私有變量只需要在變量名或函數(shù)名前加上 "__" (兩個(gè)下劃線(xiàn)),那么這個(gè)函數(shù)或變量就會(huì)成為私有的了。
在內(nèi)部,python使用一種 name mangling 技術(shù),將__var 替換成 _classname__var,因此在外部調(diào)用__var會(huì)找不到,代替它的是_classname_var。這種處理方式叫做名稱(chēng)修飾(name mangling):解釋器更改變量的名稱(chēng),以便在類(lèi)被擴(kuò)展的時(shí)候不容易產(chǎn)生沖突。
由雙下劃線(xiàn)前綴和后綴包圍的變量,不會(huì)應(yīng)用名稱(chēng)修飾,因此不會(huì)被Python解釋器修改:
我們創(chuàng)建一個(gè)類(lèi)B,dir() 查看類(lèi)的所有屬性,發(fā)現(xiàn) 存在 __aa__
但是,Python保留了有雙前導(dǎo)和雙末尾下劃線(xiàn)的名稱(chēng),用于特殊用途。 如,__init__對(duì)象構(gòu)造函數(shù),或 __call__ 它使得一個(gè)對(duì)象可以被調(diào)用。所有我們盡量不要使用這種方式命名變量,以免和Python解釋器內(nèi)置的函數(shù)發(fā)生沖突。
_ 不加任何其他字符,單獨(dú)作為一個(gè)名字,用來(lái)表示某個(gè)臨時(shí)的或者無(wú)關(guān)緊要的變量。
舉例1: 表示一個(gè)臨時(shí)變量 。在下面的循環(huán)中,我們不需要獲取循環(huán)的索引,只是print n 行 'Hello World',可以用 "_" 來(lái)表示它只是一個(gè)臨時(shí)值:
舉例2: 表示一個(gè)不關(guān)心的變量 ,僅僅是個(gè)占位符變量,用來(lái)占位。mlist 列表中,我只想獲得1,2,4 位的變量,那 3 和 5 可以 用 _ 來(lái)占位
舉例3 : 表示由解釋器評(píng)估的最近一個(gè)表達(dá)式的結(jié)果 ,方便進(jìn)行查看。
Python中的下橫線(xiàn)是什么意思
下劃線(xiàn)一般有兩種情況:
1、兩邊都有兩個(gè)下劃線(xiàn)的情況:這一般是指內(nèi)建預(yù)定義屬性,這種內(nèi)建預(yù)定義屬性。
2、中間一根下劃線(xiàn):這個(gè)命名中兩個(gè)單詞的分割線(xiàn),這個(gè)以前OO編程中單詞首字母大寫(xiě)差不多一個(gè)作用,只不過(guò)一般python的模塊函數(shù)編程會(huì)用下劃線(xiàn)分割這種方式。
更多技術(shù)請(qǐng)關(guān)注Python視頻教程。
Python中如何實(shí)現(xiàn)運(yùn)算符的重載,即實(shí)現(xiàn)例如a+b這樣的運(yùn)算符操作呢?
在C++中可以使用 operator 關(guān)鍵字實(shí)現(xiàn)運(yùn)算符的重載。但是在Python中沒(méi)有類(lèi)似這樣的關(guān)鍵字,所以要實(shí)現(xiàn)運(yùn)算符的重載,就要用到Python的魔法函數(shù)。Python魔法函數(shù)是以雙下劃線(xiàn)開(kāi)頭,雙下劃線(xiàn)結(jié)尾的一組函數(shù)。我們?cè)陬?lèi)定義中最常用到的 __init__ 函數(shù)就是這樣一個(gè)魔法函數(shù),它在創(chuàng)建類(lèi)對(duì)象時(shí)被自動(dòng)調(diào)用。
下面我們來(lái)看個(gè)簡(jiǎn)單的例子。
上述代碼示例了幾個(gè)魔法函數(shù)的用法。 __add__ 函數(shù)對(duì)應(yīng)了二元運(yùn)算符+,當(dāng)執(zhí)行a+b語(yǔ)句時(shí),python就會(huì)自動(dòng)調(diào)用a. add (b)。 對(duì)于上述例子中的v1+v2+v3,則相當(dāng)于調(diào)用了(v1. add(v2)). add(v3)。
代碼中還有一個(gè)在Python類(lèi)定義經(jīng)常使用的 __str__ 函數(shù),當(dāng)使用 str() 時(shí)會(huì)被調(diào)用。print函數(shù)對(duì)傳入的參數(shù)都調(diào)用了str()將其轉(zhuǎn)換成易讀的字符串形式,便于打印輸出,因而會(huì)調(diào)用類(lèi)定義的__str__函數(shù)打出自定義的字符串。
代碼中還有一個(gè)特殊的 __call__ 函數(shù),該函數(shù)在將對(duì)象采用函數(shù)調(diào)用方式使用時(shí)被調(diào)用, 例如v1()相當(dāng)于v1. call ()。
以上就是魔法函數(shù)的基本使用方法。常見(jiàn)的魔法函數(shù)我們可以使用 dir() 函數(shù)來(lái)查看。
輸出結(jié)果為:
上述結(jié)果中形式為‘__函數(shù)名__’的函數(shù)為魔法函數(shù),注意有些對(duì)象也是這種形式,例如__class__, __module__等, 這些不是魔法函數(shù)。具體的魔法函數(shù)說(shuō)明可以參考Python官方說(shuō)明文檔。
以上代碼在Python3.6運(yùn)行通過(guò).
類(lèi)的私有變量和私有方法
在Python中可以通過(guò)在屬性變量名前加上雙下劃線(xiàn)定義屬性為私有屬性
特殊變量命名
1、 _xx 以單下劃線(xiàn)開(kāi)頭的表示的是protected類(lèi)型的變量。即保護(hù)類(lèi)型只能允許其本身與子類(lèi)進(jìn)行訪(fǎng)問(wèn)。若內(nèi)部變量標(biāo)示,如: 當(dāng)使用“from M import”時(shí),不會(huì)將以一個(gè)下劃線(xiàn)開(kāi)頭的對(duì)象引入 。
2、 __xx 雙下劃線(xiàn)的表示的是私有類(lèi)型的變量。只能允許這個(gè)類(lèi)本身進(jìn)行訪(fǎng)問(wèn)了,連子類(lèi)也不可以用于命名一個(gè)類(lèi)屬性(類(lèi)變量),調(diào)用時(shí)名字被改變(在類(lèi)FooBar內(nèi)部,__boo變成_FooBar__boo,如self._FooBar__boo)
3、 __xx__定義的是特列方法。用戶(hù)控制的命名空間內(nèi)的變量或是屬性,如init , __import__或是file 。只有當(dāng)文檔有說(shuō)明時(shí)使用,不要自己定義這類(lèi)變量。 (就是說(shuō)這些是python內(nèi)部定義的變量名)
在這里強(qiáng)調(diào)說(shuō)一下私有變量,python默認(rèn)的成員函數(shù)和成員變量都是公開(kāi)的,沒(méi)有像其他類(lèi)似語(yǔ)言的public,private等關(guān)鍵字修飾.但是可以在變量前面加上兩個(gè)下劃線(xiàn)"_",這樣的話(huà)函數(shù)或變量就變成私有的.這是python的私有變量軋壓(這個(gè)翻譯好拗口),英文是(private name mangling.) **情況就是當(dāng)變量被標(biāo)記為私有后,在變量的前端插入類(lèi)名,再類(lèi)名前添加一個(gè)下劃線(xiàn)"_",即形成了_ClassName__變量名.**
Python內(nèi)置類(lèi)屬性
__dict__ : 類(lèi)的屬性(包含一個(gè)字典,由類(lèi)的數(shù)據(jù)屬性組成)
__doc__ :類(lèi)的文檔字符串
__module__: 類(lèi)定義所在的模塊(類(lèi)的全名是'__main__.className',如果類(lèi)位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__ 等于 mymod)
__bases__ : 類(lèi)的所有父類(lèi)構(gòu)成元素(包含了一個(gè)由所有父類(lèi)組成的元組)