狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動(dòng)力 > 頭條 > python圓

網(wǎng)站性能檢測評(píng)分

注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。

python圓

Python實(shí)戰(zhàn)6:圖片右上角加數(shù)字,類似微信的未讀信息條數(shù)的效果 推廣視頻課程

img

赫爾辛基

關(guān)注

運(yùn)行效果:

代碼的文本內(nèi)容:

from PIL import Image,ImageDraw,ImageFontim=Image.open(r'C:UsersAdministratorDesktopa.png') #打開一張圖片x=im.size; #獲取圖片的大小y=(x[0]-22,0); #獲取右上角紅色圓圈中字體的位置z=(x[0]-25,0,x[0],25) #獲取右上角紅色圓圈的位置,設(shè)置的圓的直徑為25draw=ImageDraw.Draw(im)draw.ellipse(z,fill='red',outline='red') #在圖片右上角畫圓font1=ImageFont.truetype("simsun.ttc",20,index=1) #設(shè)置字體樣式draw.text(y, '30', fill=(255, 255, 255),font=font1) #在圓內(nèi)寫入數(shù)字;im.show()

Python語言使用PyQt界面庫自定義圓形指示燈控件的方法 推廣視頻課程

img

閻訪天

關(guān)注

背景

PyQt是Qt界面庫在Python下的綁定庫,為熟悉或喜歡Qt的開發(fā)者在Python語言下編寫GUI界面程序提供了極大的便利,關(guān)于自定義控件前面已經(jīng)給出了兩個(gè)例子,分別是自定義顏色指示框控件和自定義導(dǎo)航欄控件,這次給出一個(gè)在Python語言中使用PyQt庫自定義圓形指示燈控件的例子。

自定義圓形指示燈控件例子說明

先看一下調(diào)用該圓形指示燈控件時(shí)運(yùn)行界面的樣子,如下圖所示:

上圖中,左側(cè)部分包括了:設(shè)置圓形指示燈控件的各種屬性,如設(shè)置顏色、半徑等信息;恢復(fù)默認(rèn)屬性設(shè)置;啟動(dòng)/暫停跑馬燈效果等。右側(cè)上半部分是自定義的單個(gè)圓形指示燈控件,右側(cè)下半部分使用了八個(gè)指示燈控件,用以模擬跑馬燈的效果。該圓形指示燈控件具有如下特點(diǎn):

自適應(yīng)窗口大??;可單獨(dú)對(duì)各種屬性如顏色、半徑等進(jìn)行設(shè)置;對(duì)每個(gè)屬性提供了默認(rèn)值

代碼實(shí)現(xiàn)過程

根據(jù)上面的特點(diǎn),在PyQt中實(shí)現(xiàn)了一個(gè)基于QAbstractButton的圓形指示燈控件類——MyLed,下面逐步說明主要的代碼實(shí)現(xiàn)方法。

1、類初始化代碼

這部分主要設(shè)置圓形指示燈控件屬性的初始值,設(shè)置最小大小尺寸等,主要代碼如下圖所示:

這兒在類中定義了一個(gè)“_attributes”字典變量(可理解為私有變量),里面存儲(chǔ)了該控件的所有屬性及初始值,使用字典的update()函數(shù),將其更新到self.attributes成員變量中,這樣做的好處是可以隨時(shí)使用update()函數(shù)將控件的屬性恢復(fù)到默認(rèn)設(shè)置。

2、類方法(成員函數(shù))代碼

主要包括兩個(gè)函數(shù),“setLedDefaultOption”和“setLedOption”,前者將所有屬性設(shè)置為默認(rèn)值,后者設(shè)置單個(gè)屬性值,主要代碼如下圖所示:

需要說明的是,對(duì)控件屬性進(jìn)行修改后,要及時(shí)調(diào)用update()函數(shù),以強(qiáng)制使控件進(jìn)行外觀刷新。

3、重定義paintEvent事件

這是實(shí)現(xiàn)圓形指示燈控件外觀的主要代碼,定義了控件在不同狀態(tài)(真、假狀態(tài))、不同屬性值下的外觀,主要代碼如下圖所示:

這段代碼中有詳細(xì)的注釋,主要包括畫邊框外圈、邊框內(nèi)圈及畫內(nèi)圓等操作,為呈現(xiàn)立體感,簡單的使用了輻射漸變畫刷QRadialGradient類。

備注

調(diào)用上面的圓形指示燈控件類,將其放到主窗口中,即可看到本文開頭的運(yùn)行界面。測試代碼例子較長,難度不大,調(diào)用該類的成員函數(shù),可在界面上對(duì)各個(gè)屬性值分別進(jìn)行設(shè)置,大家可自行實(shí)現(xiàn)。

在模擬真實(shí)指示燈外觀方面,本例只是粗略的使用了輻射漸變畫刷,大家可以在paintEvent事件中修改相關(guān)代碼,實(shí)現(xiàn)更真實(shí)的外觀。另外,在這個(gè)例子的基礎(chǔ)上也可進(jìn)一步改進(jìn),如實(shí)現(xiàn)方形指示燈或其它形狀外觀的指示燈控件。

歡迎加關(guān)注,共同交流。

「Python大神請繞道,小白趕快進(jìn)」如何生成簡單的隨機(jī)數(shù)? 企業(yè)視頻課程

img

龐憐容

關(guān)注

一、隨機(jī)數(shù)

隨機(jī)數(shù)是在一定范圍內(nèi)隨機(jī)產(chǎn)生的數(shù),并且得到這一范圍內(nèi)的每一個(gè)數(shù)的機(jī)會(huì)都一樣大。它在統(tǒng)計(jì)學(xué)、計(jì)算機(jī)仿真學(xué)以及密碼學(xué)中有著廣闊的應(yīng)用。

二、隨機(jī)數(shù)的生成

在Python中,通常使用random模塊生成隨機(jī)數(shù),它即可以生成簡單的隨機(jī)數(shù),還可以生成符合正態(tài)分布、三角分布等具有統(tǒng)計(jì)學(xué)規(guī)律的隨機(jī)數(shù)。但是該庫生成的隨機(jī)數(shù)并不是真正意義上的隨機(jī)數(shù),而是偽隨機(jī)數(shù),即通過可靠的算法算出一組固定的數(shù)據(jù),當(dāng)需要取值時(shí)則從這組數(shù)據(jù)中根據(jù)條件進(jìn)行取值,因此當(dāng)條件滿足時(shí),該方法產(chǎn)生的“隨機(jī)數(shù)”也可以是相同的。

下面我們就一起學(xué)習(xí)一下如何使用該模塊生成簡單隨機(jī)數(shù)吧!

1、隨機(jī)整數(shù)

random.randint(a, b)

該方法用于生成一個(gè)[a,b]區(qū)間內(nèi)的整數(shù)。

random.randrange(start, stop=None, step=1)

該方法用于從以step為步距的范圍為區(qū)間[start, stop)的等差數(shù)列中獲取一個(gè)隨機(jī)數(shù)。以start=1, stop=10, step=2為例,結(jié)果為從列表[1,3,5,7,9]中獲取一個(gè)隨機(jī)數(shù)。

注意,當(dāng)參數(shù)值stop缺失時(shí),返回值為區(qū)間[0,start)內(nèi)的隨機(jī)整數(shù),此時(shí)即使設(shè)置了step值也沒效果。

2、隨機(jī)浮點(diǎn)數(shù)

random.random()

該方法用于生成一個(gè)[0,1)區(qū)間內(nèi)的浮點(diǎn)數(shù)。

random.uniform(a, b)

該方法用于生成一個(gè)[a,b]或[b,a]區(qū)間內(nèi)的浮點(diǎn)數(shù)。

3、從序列中隨機(jī)選取元素

random.choice(seq)

該方法用于從序列seq中隨機(jī)選取一個(gè)元素。序列seq可以是元組、列表、字符串。

random.shuffle(x)

該方法用于將列表x打亂。

random.sample(population, k)

該方法用于從序列population中隨機(jī)選取k個(gè)元素組成一個(gè)新的列表。

4、生成相同的隨機(jī)數(shù)

文章一開始我們就介紹了random生成的隨機(jī)數(shù)是偽隨機(jī)數(shù),當(dāng)條件滿足時(shí),該方法產(chǎn)生的“隨機(jī)數(shù)”也可以是相同的。

這里我們說的條件滿足指的就是seed值,我們可以把它理解為從數(shù)據(jù)組取值的初始位置,該值通常不需要設(shè)置,系統(tǒng)會(huì)根據(jù)當(dāng)前時(shí)間自動(dòng)生成一個(gè),但是當(dāng)我們想要生成一個(gè)或者一組固定的隨機(jī)值時(shí),則需要通過random.seed(int)方法進(jìn)行設(shè)置。

Python使用PyQt界面庫繪制旋轉(zhuǎn)圓控件——修改版 推廣視頻課程

img

東郭蘿

關(guān)注

轉(zhuǎn)載自百家號(hào)作者:編碼那些事

Python是一種面向?qū)ο蟮母呒?jí)動(dòng)態(tài)編程語言,相對(duì)于其它如C/C++語言,具有上手快、代碼量少、開發(fā)效率高等特點(diǎn),Qt是跨平臺(tái)的C++圖形用戶界面應(yīng)用程序開發(fā)框架,是當(dāng)前主流的GUI開發(fā)工具之一,其在Python下的綁定是PyQt庫。使用“Python+PyQt”架構(gòu)編寫應(yīng)用軟件,可以做到在兼顧軟件運(yùn)行效率的前提下,也可以大大節(jié)省開發(fā)者的時(shí)間成本。

在上篇文章中給出了一個(gè)在Python語言中使用PyQt庫自定義不停旋轉(zhuǎn)的圓控件的例子,這次在這個(gè)例子的基礎(chǔ)上進(jìn)行修改,達(dá)到另外的旋轉(zhuǎn)外觀效果。

參考上篇文章:Python使用PyQt界面庫繪制不停旋轉(zhuǎn)的圓控件

控件例子說明

代碼實(shí)現(xiàn)后的控件運(yùn)行界面如下圖所示:

與上例不同的是,在不停旋轉(zhuǎn)的圓中,最外圈是藍(lán)綠相間的環(huán)形帶,最內(nèi)圈是灰綠色的背景圓圈。

代碼實(shí)現(xiàn)過程

在代碼實(shí)現(xiàn)中,除了重定義的paintEvent事件與上例不同外,其余的地方完全相同。paintEvent事件代碼如下圖所示:

與上例不同的地方在于:

1. 第37-40行,畫整個(gè)圓的顏色時(shí),修改顏色為灰綠色QColor(50, 80, 80),實(shí)際上在最終顯示效果中呈現(xiàn)的是內(nèi)圓的顏色

2. 第44行,定義每個(gè)扇形的旋轉(zhuǎn)跨度變量spanAngle為90時(shí),不需要乘以16,原因是這兒畫扇形時(shí)使用的函數(shù)是QPainterPath類的arcTo函數(shù),這是與上例使用QPainter類的drawPie函數(shù)的區(qū)別所在

3. 第46-55行,在畫4個(gè)扇形區(qū)域時(shí),其原理是,定義了兩個(gè)路徑path和subPath,分別在上面畫扇形區(qū)域和中間內(nèi)圓形區(qū)域,兩個(gè)區(qū)域的差就是最后呈現(xiàn)的效果,最外圈是藍(lán)綠相間的環(huán)形帶,最內(nèi)圈是灰綠色的背景圓圈圖,其中第52行,定義內(nèi)圓的所在的矩形區(qū)域時(shí),使用了QRect類的adjusted函數(shù),其目的是對(duì)pieRect矩形的大小進(jìn)行調(diào)整,以裁減掉中間的內(nèi)圓區(qū)域

備注

在PyQt中,通過自定義paintEvent事件,靈活使用PyQt中QPainterPath類和QPainter類的相關(guān)函數(shù),可以繪制出各種各樣的不同外觀效果的控件。

歡迎加關(guān)注,共同交流。

Python代碼風(fēng)格:PEP8規(guī)則 筆記 推廣視頻課程

img

老貓

關(guān)注

Python程序設(shè)計(jì)的代碼風(fēng)格應(yīng)該遵循PEP8規(guī)則:

一、代碼布局

1、縮進(jìn):

每級(jí)縮進(jìn)4個(gè)空格(不用Tab,更不空格Tab混用)

1、續(xù)行應(yīng)該與其包裹元素對(duì)齊,要么使用圓括號(hào)、方括號(hào)和花括號(hào)內(nèi)的隱式行連接來垂直對(duì)齊,要么使用懸掛式縮進(jìn)對(duì)齊。當(dāng)使用懸掛縮進(jìn)時(shí),應(yīng)該考慮到第一行不應(yīng)該有參數(shù),以及使用縮進(jìn)以區(qū)分自己是續(xù)行。

2、縮進(jìn)4個(gè)空格的規(guī)則對(duì)于續(xù)行是可選的。

3、當(dāng) if 語句的條件部分長到需要換行寫的時(shí)候,注意可以在兩個(gè)字符關(guān)鍵字的連接處(比如 if ),增加一個(gè)空格,再增加一個(gè)左括號(hào)來創(chuàng)造一個(gè)4空格縮進(jìn)的多行條件。這會(huì)與 if 語句內(nèi)同樣使用4空格縮進(jìn)的代碼產(chǎn)生視覺沖突。PEP沒有明確指明要如何區(qū)分i發(fā)的條件代碼和內(nèi)嵌代碼??墒褂玫倪x項(xiàng)包括但不限于下面幾種情況:

4、(可以參考下面關(guān)于是否在二進(jìn)制運(yùn)算符之前或之后截?cái)嗟挠懻摚?/p>

在多行結(jié)構(gòu)中的大括號(hào)/中括號(hào)/小括號(hào)的右括號(hào)可以與內(nèi)容對(duì)齊單獨(dú)起一行作為最后一行的第一個(gè)字符,如:

或者也可以與多行結(jié)構(gòu)的第一行第一個(gè)字符對(duì)齊,如:

2、Tab還是空格?

空格是被首先推薦的縮進(jìn)方式。

Tab應(yīng)該只在現(xiàn)有代碼已經(jīng)使用tab進(jìn)行縮進(jìn)的情況下使用,以便和現(xiàn)有代碼保持一致。

Python 3不允許再同一個(gè)代碼塊中Tab和空格混合使用。

混合使用制表符和空格縮進(jìn)的Python2代碼應(yīng)該統(tǒng)一轉(zhuǎn)成空格。

使用命令行運(yùn)行Python 2時(shí),使用-t選項(xiàng),會(huì)出現(xiàn)非法混用tab和空格的警告。當(dāng)使用-tt選項(xiàng)時(shí),這些警告會(huì)變成錯(cuò)誤。強(qiáng)烈推薦使用這些選項(xiàng)!

3、最大行長

每行最大長度79個(gè)字符。

對(duì)于連續(xù)大段的文字(比如文檔字符串(docstring)或注釋),每行應(yīng)該被限制在72個(gè)字符長度內(nèi)。

Python標(biāo)準(zhǔn)庫比較傳統(tǒng),將行長限制在79個(gè)字符以內(nèi)(文檔字符串/注釋為72個(gè)字符)。

一種推薦的換行方式是利用Python圓括號(hào)、方括號(hào)和花括號(hào)中的隱式續(xù)行。長行可以通過在括號(hào)內(nèi)換行來分成多行。應(yīng)該最好加上反斜杠來區(qū)別續(xù)行。

有時(shí)續(xù)行只能使用反斜杠才。例如,較長的多個(gè) with 語句不能采用隱式續(xù)行,只能接受反斜杠表示換行:

另一個(gè)這樣的例子是assert語句。要確保續(xù)行的縮進(jìn)適當(dāng)。

在二元運(yùn)算符之前應(yīng)該換行嗎?

遵循數(shù)學(xué)的傳統(tǒng)能產(chǎn)出更多可讀性高的代碼:

4、空行

頂層函數(shù)和類的定義,前后用兩個(gè)空行隔開。

類里的方法定義用一個(gè)空行隔開。

相關(guān)的功能組可以用額外的空行(盡量少地)隔開。一堆相關(guān)的單行代碼之間的空白行可以省略(例如,一組虛擬實(shí)現(xiàn) dummy implementations)。

在函數(shù)中使用空行來區(qū)分邏輯段(盡量少地)。

Python接受control-L(即^L)換頁符作為空格;許多工具把這些字符當(dāng)作頁面分隔符,所以你可以在文件中使用它們來分隔相關(guān)段落。請注意,一些編輯器和基于Web的代碼閱讀器可能無法識(shí)別control-L為換頁,將在其位置顯示另一個(gè)字形。

5、源文件編碼

Python核心發(fā)布版本中的代碼總是以UTF-8格式編碼(或者在Python2中用ASCII編碼)。

使用ASCII(Python 2)或者UTF-8(Python 3)的文件不應(yīng)該添加編碼聲明。

在標(biāo)準(zhǔn)庫中,只有用作測試目的,或者注釋或文檔字符串需要提及作者名字而不得不使用非ASCII字符時(shí),才能使用非默認(rèn)的編碼。否則,在字符串文字中包括非ASCII數(shù)據(jù)時(shí),推薦使用\x, \u, U或N等轉(zhuǎn)義符。

對(duì)于Python 3.0及其以后的版本中,標(biāo)準(zhǔn)庫遵循以下原則(參見PEP 3131):Python標(biāo)準(zhǔn)庫中的所有標(biāo)識(shí)符都必須只采用ASCII編碼的標(biāo)識(shí)符,在可行的條件下也應(yīng)當(dāng)使用英文詞(很多情況下,使用的縮寫和技術(shù)術(shù)語詞都不是英文)。此外,字符串文字和注釋應(yīng)該只包括ASCII編碼。只有兩種例外:

(a) 測試情況下為了測試非ASCII編碼的特性

(b) 作者名字。作者名字不是由拉丁字母組成的也必須提供一個(gè)拉丁音譯名。

鼓勵(lì)面向全球的開源項(xiàng)目都采用類似的原則。

6、導(dǎo)入

1、imports應(yīng)該分行寫,而不是都寫在一行,例如:

這樣寫也是可以的:

導(dǎo)入(import)始終在文件的頂部,在模塊注釋和文檔字符串之后,在模塊全局變量和常量之前。

導(dǎo)入順序如下:

imports應(yīng)該按照下面的順序分組來寫:

1、標(biāo)準(zhǔn)庫imports

2、相關(guān)第三方imports

3、本地應(yīng)用/庫的特定imports

不同組的imports之前用空格隔開。

將任何相關(guān)的 __all__ 說明(specification)放在imports之后。

推薦使用絕對(duì)(absolute)imports,因?yàn)檫@樣通常更易讀,在import系統(tǒng)沒有正確配置的情況下,也會(huì)有更好的表現(xiàn)(或者至少會(huì)給出錯(cuò)誤信息):

在絕對(duì)路徑比較長的情況下,也可以使用相對(duì)導(dǎo)入:

Python 3中已經(jīng)禁止隱式的相對(duì)導(dǎo)入。

導(dǎo)入類的方法,通常可以這樣寫:

如果和本地命名的拼寫產(chǎn)生了沖突,應(yīng)當(dāng)使用絕對(duì)導(dǎo)入:

禁止使用通配符導(dǎo)入。

通配符導(dǎo)入(from import *)應(yīng)該避免,因?yàn)樗磺宄臻g有哪些名稱存,混淆讀者和許多自動(dòng)化的工具。唯一的例外是重新發(fā)布對(duì)外的API時(shí)可以考慮使用。

7、模塊中前后具有雙下劃線的變量名

像__all__ , __author__ , __version__ 等這樣的模塊中的變量名(也就是名字里有兩個(gè)前綴下劃線和兩個(gè)后綴下劃線),應(yīng)該放在文檔字符串的后面,以及除from __future__ 之外的import表達(dá)式前面。Python要求將來在模塊中的導(dǎo)入,必須出現(xiàn)在除文檔字符串之外的其他代碼之前。

比如:

二、字符串引號(hào)

Python中單引號(hào)字符串和雙引號(hào)字符串都是相同的。注意盡量避免在字符串中的反斜杠以提高可讀性。

根據(jù)PEP 257, 三個(gè)引號(hào)都使用雙引號(hào)。

三、表達(dá)式和語句中的空格

在下列情況下,避免使用無關(guān)的空格:

1、緊跟在小括號(hào),中括號(hào)或者大括號(hào)后。

2、緊貼在逗號(hào)、分號(hào)或者冒號(hào)之前。

3、然而,冒號(hào)在切片中就像二元運(yùn)算符,在兩邊應(yīng)該有相同數(shù)量的空格(把它當(dāng)做優(yōu)先級(jí)最低的操作符)。在擴(kuò)展的切片操作中,所有的冒號(hào)必須有相同的間距。例外情況:當(dāng)一個(gè)切片參數(shù)被省略時(shí),空格就被省略了。

4、緊貼在函數(shù)參數(shù)的左括號(hào)之前。

5、緊貼索引或者切片的左括號(hào)之前。

6、為了和另一個(gè)賦值語句對(duì)齊,在賦值運(yùn)算符附件加多個(gè)空格。

其他建議

1、避免在尾部添加空格。因?yàn)槲膊康目崭裢ǔ6伎床灰?,?huì)產(chǎn)生混亂:比如,一個(gè)反斜杠后面跟一個(gè)空格的換行符,不算續(xù)行標(biāo)記。有些編輯器不會(huì)保留尾空格,并且很多項(xiàng)目(像CPython)在pre-commit的掛鉤調(diào)用中會(huì)過濾掉尾空格。

總是在二元運(yùn)算符兩邊加一個(gè)空格:賦值(=),增量賦值(+=,-=),比較(==,,!=,,=,in,not,in,is,is not),布爾(and, or, not)。

如果使用具有不同優(yōu)先級(jí)的運(yùn)算符,請考慮在具有最低優(yōu)先級(jí)的運(yùn)算符周圍添加空格。有時(shí)需要通過自己來判斷;但是,不要使用一個(gè)以上的空格,并且在二元運(yùn)算符的兩邊使用相同數(shù)量的空格。

2、在指定函數(shù) 關(guān)鍵字參數(shù) 或者 默認(rèn)參數(shù) 值的時(shí)候,不要在=附近加上空格。

3、功能型注釋應(yīng)該使用冒號(hào)的一般性規(guī)則,并且在使用 ->的時(shí)候要在兩邊加空格。(參考下面的功能注釋得到能夠多信息)

4、當(dāng)給有類型備注的參數(shù)賦值的時(shí)候,在=兩邊添加空格(僅針對(duì)那種有類型備注和默認(rèn)值的參數(shù))。

5、復(fù)合語句(同一行中的多個(gè)語句)通常是不允許的。

6、雖然有時(shí)候?qū)⑿〉拇a塊和 if/for/while 放在同一行沒什么問題,多行語句塊的情況不要這樣用,同樣也要避免代碼行太長!

四、注釋

與代碼自相矛盾的注釋比沒注釋更差。修改代碼時(shí)要優(yōu)先更新注釋!

注釋是完整的句子。如果注釋是斷句,首字母應(yīng)該大寫,除非它是小寫字母開頭的標(biāo)識(shí)符(永遠(yuǎn)不要修改標(biāo)識(shí)符的大小寫)。

如果注釋很短,可以省略末尾的句號(hào)。注釋塊通常由一個(gè)或多個(gè)段落組成。段落由完整的句子構(gòu)成且每個(gè)句子應(yīng)該以點(diǎn)號(hào)(后面要有兩個(gè)空格)結(jié)束,并注意斷詞和空格。

非英語國家的程序員請用英語書寫你的注釋,除非你120%確信代碼永遠(yuǎn)不會(huì)被不懂你的語言的人閱讀。

1、注釋塊

注釋塊通常應(yīng)用在代碼前,并和這些代碼有同樣的縮進(jìn)。每行以 '# '(除非它是注釋內(nèi)的縮進(jìn)文本,注意#后面有空格)。

注釋塊內(nèi)的段落用僅包含單個(gè) '#' 的行分割。

2、行內(nèi)注釋

慎用行內(nèi)注釋(Inline Comments) 節(jié)儉使用行內(nèi)注釋。 行內(nèi)注釋是和語句在同一行,至少用兩個(gè)空格和語句分開。行內(nèi)注釋不是必需的,重復(fù)羅嗦會(huì)使人分心。

不推薦:

但是有時(shí),很有必要:

加了以后對(duì)理解代碼很有幫助的情況下,關(guān)鍵處才加。

3、文檔字符串

文檔字符串的標(biāo)準(zhǔn)參見:PEP 257。

為所有公共模塊、函數(shù)、類和方法書寫文檔字符串。非公開方法不一定有文檔字符串,建議有注釋(出現(xiàn)在 def 行之后)來描述這個(gè)方法做什么。

更多參考:PEP 257 文檔字符串約定。注意結(jié)尾的 """ 應(yīng)該單獨(dú)成行,例如:

單行的文檔字符串,結(jié)尾的 """ 在同一行。

4、版本標(biāo)簽

如果你必須在源文件中包含git、Subversion、CVS或RCS crud信息,放置在模塊的文檔字符串之后,任何其他代碼之前,上下各用一個(gè)空行:

五、命名規(guī)范

Python庫的命名約定有點(diǎn)混亂,不可能完全一致。但依然有些普遍推薦的命名規(guī)范的。新的模塊和包 (包括第三方的框架) 應(yīng)該遵循這些標(biāo)準(zhǔn)。對(duì)不同風(fēng)格的已有的庫,建議保持內(nèi)部的一致性。

1、最重要的原則

用戶可見的API命名應(yīng)遵循使用約定而不是實(shí)現(xiàn)。

2、命名風(fēng)格

以下是常見的命名方式:

b(單個(gè)小寫字母)

B(單個(gè)大寫字母)

lowercase (小寫字母)

lower_case_with_underscores (使用下劃線分隔的小寫字母)

UPPERCASE( 大寫字母)

UPPER_CASE_WITH_UNDERSCORES (使用下劃線分隔的大寫字母)

CapitalizedWords(首字母大寫的單詞串或駝峰縮寫)

注意: 使用大寫縮寫時(shí),縮寫使用大寫字母更好。故 HTTPServerError 比 HttpServerError 更好。

mixedCase(不同于首字母大寫,第一個(gè)單詞的首字母小寫)

Capitalized_Words_With_Underscores(帶下劃線,首字母大寫,巨丑無比)

還有一種風(fēng)格使用短前綴分組名字。這在Python中不常用, 但出于完整性提一下。例如,os.stat()返回的元組有st_mode, st_size, st_mtime等等這樣的名字(與POSIX系統(tǒng)調(diào)用結(jié)構(gòu)體一致)。

X11庫的所有公開函數(shù)以X開頭, Python中通常認(rèn)為是不必要的,因?yàn)閷傩院头椒袑?duì)象作前綴,而函數(shù)名有模塊名為前綴。

下面講述首尾有下劃線的情況:

_single_leading_underscore:(單前置下劃線): 弱內(nèi)部使用標(biāo)志。 例如"from M import " 不會(huì)導(dǎo)入以下劃線開頭的對(duì)象。

single_trailing_underscore_(單后置下劃線): 用于避免與 Python關(guān)鍵詞的沖突。 例如:

__double_leading_underscore(雙前置下劃線): 當(dāng)用于命名類屬性,會(huì)觸發(fā)名字重整。 (在類FooBar中,__boo變成 _FooBar__boo)。

__double_leading_and_trailing_underscore__(雙前后下劃線):用戶名字空間的魔法對(duì)象或?qū)傩?。例?__init__ , __import__ or __file__,不要自己發(fā)明這樣的名字。

3、命名約定規(guī)范

避免采用的名字:

決不要用字符'l'(小寫字母el),'O'(大寫字母oh),或 'I'(大寫字母eye) 作為單個(gè)字符的變量名。一些字體中,這些字符不能與數(shù)字1和0區(qū)別。用'L' 代替'l'時(shí)。

包和模塊名:

模塊名要簡短,全部用小寫字母,可使用下劃線以提高可讀性。包名和模塊名類似,但不推薦使用下劃線。

模塊名對(duì)應(yīng)到文件名,有些文件系統(tǒng)不區(qū)分大小寫且截短長名字,在 Unix上不是問題,但當(dāng)把代碼遷移到 Mac、Windows 或 DOS 上時(shí),就可能是個(gè)問題。當(dāng)然隨著系統(tǒng)的演進(jìn),這個(gè)問題已經(jīng)不是經(jīng)常出現(xiàn)。

另外有些模塊底層用C或C++ 書寫,并有對(duì)應(yīng)的高層Python模塊,C/C++模塊名有一個(gè)前置下劃線 (如:_socket)。

類名:

遵循CapWord。

接口需要文檔化并且可以調(diào)用時(shí),可能使用函數(shù)的命名規(guī)則。

注意大部分內(nèi)置的名字是單個(gè)單詞(或兩個(gè)),CapWord只適用于異常名稱和內(nèi)置的常量。

異常名:

如果確實(shí)是錯(cuò)誤,需要在類名添加后綴 "Error"。

全局變量名:

變量盡量只用于模塊內(nèi)部,約定類似函數(shù)。

對(duì)設(shè)計(jì)為通過 "from M import " 來使用的模塊,應(yīng)采用 __all__ 機(jī)制來防止導(dǎo)入全局變量;或者為全局變量加一個(gè)前置下劃線。

函數(shù)名:

函數(shù)名應(yīng)該為小寫,必要時(shí)可用下劃線分隔單詞以增加可讀性。 mixedCase(混合大小寫)僅被允許用于兼容性考慮(如: threading.py)。

函數(shù)和方法的參數(shù):

實(shí)例方法第一個(gè)參數(shù)是 'self'。

類方法第一個(gè)參數(shù)是 'cls'。

如果函數(shù)的參數(shù)名與保留關(guān)鍵字沖突,通常在參數(shù)名后加一個(gè)下劃線。

方法名和實(shí)例變量:

同函數(shù)命名規(guī)則。

非公開方法和實(shí)例變量增加一個(gè)前置下劃線。

為避免與子類命名沖突,采用兩個(gè)前置下劃線來觸發(fā)重整。類Foo屬性名為__a, 不能以 Foo.__a訪問。(執(zhí)著的用戶還是可以通過Foo._Foo__a。) 通常雙前置下劃線僅被用來避免與基類的屬性發(fā)生命名沖突。

常量:

<...
img

在線咨詢

建站在線咨詢

img

微信咨詢

掃一掃添加
動(dòng)力姐姐微信

img
img

TOP