Python學(xué)習(xí)筆記Day1 - 開發(fā)基礎(chǔ)知識(shí)

1.Python注釋

單行注釋 #作為單行注釋的符號(hào),語(yǔ)法格式為:
# 注釋內(nèi)容
從井號(hào)#開始,直到這行結(jié)束為止的所有內(nèi)容都是注釋。Python 解釋器遇到#時(shí),會(huì)忽略它后面的整行內(nèi)容。

#使用print輸出字符串
print("Hello World!")

#使用 print輸出數(shù)字
print(100)

多行注釋 使用三個(gè)連續(xù)的單引號(hào)'''或者三個(gè)連續(xù)的雙引號(hào)"""注釋多行內(nèi)容,具體格式如下:

'''
使用 3 個(gè)單引號(hào)分別作為注釋的開頭和結(jié)尾
可以一次性注釋多行內(nèi)容
這里面的內(nèi)容全部是注釋內(nèi)容
'''

多行注釋通常用來(lái)為 Python 文件、模塊、類或者函數(shù)等添加版權(quán)或者功能描述信息。

注意事項(xiàng)

  • Python 多行注釋不支持嵌套
  • 不管是多行注釋還是單行注釋,當(dāng)注釋符作為字符串的一部分出現(xiàn)時(shí),就不能再將它們視為注釋標(biāo)記,而應(yīng)該看做正常代碼的一部分

2.Python縮進(jìn)規(guī)則

Python 中實(shí)現(xiàn)對(duì)代碼的縮進(jìn),可以使用空格或者 Tab 鍵實(shí)現(xiàn)。
但無(wú)論是手動(dòng)敲空格,還是使用 Tab 鍵,通常情況下都是采用 4 個(gè)空格長(zhǎng)度作為一個(gè)縮進(jìn)量

height=float(input("輸入身高:")) #輸入身高
weight=float(input("輸入體重:")) #輸入體重
bmi=weight/(height*height)       #計(jì)算BMI指數(shù)

#判斷身材是否合理
if bmi<18.5:
    #下面 2 行同屬于 if 分支語(yǔ)句中包含的代碼
    #因此屬于同一作用域
    print("BMI指數(shù)為:"+str(bmi)) #輸出BMI指數(shù)
    print("體重過(guò)輕")
if bmi>=18.5 and bmi<24.9:
    print("BMI指數(shù)為:"+str(bmi)) #輸出BMI指數(shù)
    print("正常范圍,注意保持")
if bmi>=24.9 and bmi<29.9:
    print("BMI指數(shù)為:"+str(bmi)) #輸出BMI指數(shù)
    print("體重過(guò)重")
if bmi>=29.9:
    print(BMI指數(shù)為:"+str(bmi)) #輸出BMI指數(shù)
    print("肥胖")

Python 對(duì)代碼的縮進(jìn)要求非常嚴(yán)格,同一個(gè)級(jí)別代碼塊的縮進(jìn)量必須一樣,否則解釋器會(huì)報(bào) SyntaxError 異常錯(cuò)誤。


3.PEP8 Python 編碼規(guī)范整理

一 代碼編排

1 縮進(jìn):4個(gè)空格的縮進(jìn)(編輯器都可以完成此功能),不使用TAB,更不能混合使用TAB和空格
2 每行最大長(zhǎng)度79,換行可以使用反斜杠,最好使用圓括號(hào)。換行點(diǎn)要在操作符的后邊敲回車
3 類和top-level函數(shù)定義之間空兩行;類中的方法定義之間空一行;函數(shù)內(nèi)邏輯無(wú)關(guān)段落之間空一行;其他地方盡量不要再空行。

二 文檔編排

1 模塊內(nèi)容的順序:模塊說(shuō)明和docstring—import—globals&constants—其他定義。其中import部分,又按標(biāo)準(zhǔn)、三方和自己編寫順序依次排放,之間空一行
2 不要在一句import中多個(gè)庫(kù),比如import os, sys不推薦。
3 如果采用from XX import XX引用庫(kù),可以省略‘module.’,都是可能出現(xiàn)命名沖突,這時(shí)就要采用import XX。

三 空格的使用

總體原則,避免不必要的空格。
1 各種右括號(hào)前不要加空格。
2 逗號(hào)、冒號(hào)、分號(hào)前不要加空格
3 函數(shù)的左括號(hào)前不要加空格。如Func(1)
4 序列的左括號(hào)前不要加空格。如list[2]。
5 操作符左右各加一個(gè)空格,不要為了對(duì)齊增加空格。
6 函數(shù)默認(rèn)參數(shù)使用的賦值符左右省略空格。
7 不要將多句語(yǔ)句寫在同一行,盡管使用‘;’允許。
8 if/for/while語(yǔ)句中,即使執(zhí)行語(yǔ)句只有一句,也必須另起一行。

四 注釋

總體原則,錯(cuò)誤的注釋不如沒有注釋。所以當(dāng)一段代碼發(fā)生變化時(shí),第一件事就是要修改注釋!
注釋必須使用英文,最好是完整的句子,首字母大寫,句后要有結(jié)束符,結(jié)束符后跟兩個(gè)空格,開始下一句。如果是短語(yǔ),可以省略結(jié)束符。

1 塊注釋,在一段代碼前增加的注釋。在‘#’后加一空格。段落之間以只有‘#’的行間隔。比如:

Description : Module config.

# Input : None

# Output : None

2 行注釋,在一句代碼后加注釋。比如:x = x + 1 #注這是一條注釋

但是這種方式盡量少使用。

3 避免無(wú)謂的注釋。

五 文檔描述

1 為所有的共有模塊、函數(shù)、類、方法寫docstrings;非共有的沒有必要,但是可以寫注釋(在def的下一行)。
2 如果docstring要換行,參考如下例子,詳見PEP 257

"""Return a foobang
Optional plotz says to frobnicate the bizbaz first.
"""

六 命名規(guī)范

總體原則,新編代碼必須按下面命名風(fēng)格進(jìn)行,現(xiàn)有庫(kù)的編碼盡量保持風(fēng)格。
1 盡量單獨(dú)使用小寫字母‘l’,大寫字母‘O’等容易混淆的字母。
2 模塊命名盡量短小,使用全部小寫的方式,可以使用下劃線。
3 包命名盡量短小,使用全部小寫的方式,不可以使用下劃線。
4 類的命名使用CapWords的方式,模塊內(nèi)部使用的類采用_CapWords的方式。
5 異常命名使用CapWords+Error后綴的方式。
6 全局變量盡量只在模塊內(nèi)有效,類似C語(yǔ)言中的static。實(shí)現(xiàn)方法有兩種,一是all機(jī)制;二是前綴一個(gè)下劃線。
7 函數(shù)命名使用全部小寫的方式,可以使用下劃線。
8 常量命名使用全部大寫的方式,可以使用下劃線。
9 類的屬性(方法和變量)命名使用全部小寫的方式,可以使用下劃線。
10 類的屬性有3種作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public屬性前,前綴一條下劃線。
11 類的屬性若與關(guān)鍵字名字沖突,后綴一下劃線,盡量不要使用縮略等其他方式。
12 為避免與子類屬性命名沖突,在類的一些屬性前,前綴兩條下劃線。比如:類Foo中聲明__a,訪問(wèn)時(shí),只能通過(guò)Foo._Foo__a,避免歧義。如果子類也叫Foo,那就無(wú)能為力了。
13 類的方法第一個(gè)參數(shù)必須是self,而靜態(tài)方法第一個(gè)參數(shù)必須是cls。

七 編碼建議

1 編碼中考慮到其他python實(shí)現(xiàn)的效率等問(wèn)題,比如運(yùn)算符‘+’在CPython(Python)中效率很高,都是Jython中卻非常低,所以應(yīng)該采用.join()的方式。
2 盡可能使用 ‘is’ ‘is not’取代‘==’,比如if x is not None 要優(yōu)于if x。
3 使用基于類的異常,每個(gè)模塊或包都有自己的異常類,此異常類繼承自Exception。
4 異常中不要使用裸露的except,except后跟具體的exceptions。

5 異常中try的代碼盡可能少。比如:

try:

value = collection[key]

except KeyError:

return key_not_found(key)

else:

return handle_value(value)

要優(yōu)于

try:

\# Too broad!

return handle_value(collection[key])

except KeyError:

\# Will also catch KeyError raised by handle_value()

return key_not_found(key)

6 使用 startswith()endswith() 代替切片進(jìn)行序列前綴或后綴的檢查。比如
Yes: if foo.startswith(‘bar’) 優(yōu)于 No: if foo[:3] == ‘bar’
7 使用 isinstance() 比較對(duì)象的類型。比如
Yes: if isinstance(obj, int) 優(yōu)于 No: if type(obj) is type(1)

8 判斷序列空或不空,有如下規(guī)則

Yes: if not seq:

if seq:

優(yōu)于

No: if len(seq)

if not len(seq)

9 字符串不要以空格收尾。
10 二進(jìn)制數(shù)據(jù)判斷使用 if boolvalue的方式


4.Python標(biāo)識(shí)符命名規(guī)范

Python標(biāo)識(shí)符命名規(guī)則:

  • 標(biāo)識(shí)符是由字符(A~Z 和 a~z)、下劃線和數(shù)字組成,但第一個(gè)字符不能是數(shù)字。
  • 標(biāo)識(shí)符不能和 Python 中的保留字相同。有關(guān)保留字,后續(xù)章節(jié)會(huì)詳細(xì)介紹。
  • Python中的標(biāo)識(shí)符中,不能包含空格、@、% 以及 $ 等特殊字符。
  • 在 Python 中,標(biāo)識(shí)符中的字母是嚴(yán)格區(qū)分大小寫的
  • Python 語(yǔ)言中,以下劃線開頭的標(biāo)識(shí)符有特殊含義,例如:
  1. 以單下劃線開頭的標(biāo)識(shí)符(如 _width),表示不能直接訪問(wèn)的類屬性,其無(wú)法通過(guò) from...import* 的方式導(dǎo)入;
  2. 以雙下劃線開頭的標(biāo)識(shí)符(如__add)表示類的私有成員;
  3. 以雙下劃線作為開頭和結(jié)尾的標(biāo)識(shí)符(如 __init__),是專用標(biāo)識(shí)符。
    因此,除非特定場(chǎng)景需要,應(yīng)避免使用以下劃線開頭的標(biāo)識(shí)符。

標(biāo)識(shí)符的命名,除了要遵守以上這幾條規(guī)則外,不同場(chǎng)景中的標(biāo)識(shí)符,其名稱也有一定的規(guī)范可循,例如:

  • 當(dāng)標(biāo)識(shí)符用作模塊名時(shí),應(yīng)盡量短小,并且全部使用小寫字母,可以使用下劃線分割多個(gè)字母,例如 game_mian、game_register 等。
  • 當(dāng)標(biāo)識(shí)符用作包的名稱時(shí),應(yīng)盡量短小,也全部使用小寫字母,不推薦使用下劃線,例如 com.mr、com.mr.book 等。
  • 當(dāng)標(biāo)識(shí)符用作類名時(shí),應(yīng)采用單詞首字母大寫的形式。例如,定義一個(gè)圖書類,可以命名為 Book。
  • 模塊內(nèi)部的類名,可以采用 "下劃線+首字母大寫" 的形式,如 _Book;
  • 函數(shù)名、類中的屬性名和方法名,應(yīng)全部使用小寫字母,多個(gè)單詞之間可以用下劃線分割;
    常量命名應(yīng)全部使用大寫字母,單詞之間可以用下劃線分割

5.Python關(guān)鍵字

保留字是 Python語(yǔ)言中一些已經(jīng)被賦予特定意義的單詞,這就要求開發(fā)者在開發(fā)程序時(shí),不能用這些保留字作為標(biāo)識(shí)符給變量、函數(shù)、類、模板以及其他對(duì)象命名。

(base) leesin@LeeSin-Deepin:~$ python
Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 
'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 
'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 
'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
Python關(guān)鍵字一覽表

6.Python內(nèi)置函數(shù)

Python 解釋器也是一個(gè)程序,它給用戶提供了一些常用功能,并給它們起了獨(dú)一無(wú)二的名字,這些常用功能就是內(nèi)置函數(shù)。Python 解釋器啟動(dòng)以后,內(nèi)置函數(shù)也生效了,可以直接拿來(lái)使用。

Python 標(biāo)準(zhǔn)庫(kù)相當(dāng)于解釋器的外部擴(kuò)展,它并不會(huì)隨著解釋器的啟動(dòng)而啟動(dòng),要想使用這些外部擴(kuò)展,必須提前導(dǎo)入。Python 標(biāo)準(zhǔn)庫(kù)非常龐大,包含了很多模塊,要想使用某個(gè)函數(shù),必須提前導(dǎo)入對(duì)應(yīng)的模塊,否則函數(shù)是無(wú)效的。

內(nèi)置函數(shù)是解釋器的一部分,它隨著解釋器的啟動(dòng)而生效;標(biāo)準(zhǔn)庫(kù)函數(shù)是解釋器的外部擴(kuò)展,導(dǎo)入模塊以后才能生效。一般來(lái)說(shuō),內(nèi)置函數(shù)的執(zhí)行效率要高于標(biāo)準(zhǔn)庫(kù)函數(shù)。

Python內(nèi)置函數(shù)一覽表

注意:
不要使用內(nèi)置函數(shù)的名字作為標(biāo)識(shí)符使用(例如變量名、函數(shù)名、類名、模板名、對(duì)象名等)
雖然這樣做 Python 解釋器不會(huì)報(bào)錯(cuò),但這會(huì)導(dǎo)致同名的內(nèi)置函數(shù)被覆蓋,從而無(wú)法使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 介紹 愚蠢的使用一致性是無(wú)知的怪物(A Foolish Consistency is the Hobgoblin ...
    slords閱讀 2,059評(píng)論 0 2
  • 更新時(shí)間:2016/5/13 介紹 本文檔所提供的編碼規(guī)范,適用于主要的Python發(fā)行版中組成標(biāo)準(zhǔn)庫(kù)的Pytho...
    超net閱讀 5,990評(píng)論 0 15
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,836評(píng)論 0 3
  • 基于《Python語(yǔ)言程序設(shè)計(jì)基礎(chǔ)(第2版)》 第一部分 初識(shí)Python語(yǔ)言 第1章 程序設(shè)計(jì)基本方法 1.1 ...
    柄志閱讀 27,786評(píng)論 4 44
  • 原文 原文下載之后的格式略有點(diǎn)不友好,利用簡(jiǎn)述的markdown,編輯一下.版權(quán)歸原作者 PEP Index > ...
    大飛哥閱讀 2,617評(píng)論 0 0

友情鏈接更多精彩內(nèi)容