本章主要爲大家介紹Python的一些語法,其中包括標識符、關鍵字、常量、變量、表達式、語句、註釋、模塊和包等內容。
標識符和關鍵字
任何一種計算機語言都離不開標識符和關鍵字,因此下面將詳細介紹Python標識符和關鍵字。
標識符
標識符就是變量、常量、函數、屬性、類、模塊和包等由程序員指定的名字。構成標識符的字符均有一定的規範,Python語言中標識符的命名規則如下:
-
區分大小寫:Myname與myname是兩個不同的標識符。
-
首字符,可以是下劃線(_)或字母,但不能是數字。
-
除首字符外其他字符,可以是下劃線(_)、字母和數字。
-
關鍵字不能作爲標識符。
- 不要使用Python內置函數作爲自己的標識符。
例如,身高、identifier、userName、User_Name、_sys_val等爲合法的標識符,注意中文“身高”命名的變量是合法的;而2mail、room#、\$Name和class爲非法的標識符,注意#和\$不能構成標識符。
關鍵字
關鍵字是類似於標識符的保留字符序列,由語言本身定義好的,Python語言中有33關鍵字。只有三個,即False、None和True首字母大寫,其他的全部小寫。具體內容見表4-1所示。
表 4‑1 Python關鍵字
False | def | if | raise |
---|---|---|---|
None | del | import | return |
True | elif | in | try |
and | else | is | while |
as | except | lambda | with |
assert | finally | nonlocal | yield |
break | for | not | |
class | from | or | |
continue | global | pass |
變量和常量
上一章中介紹瞭如何使用編寫一個Python小程序,其中就用到了變量。常量和變量是構成表達式的重要組成部分。
變量
在Python中聲明變量時不需要指定它的數據類型,只要是給一個標識符賦值就聲明瞭變量,示例代碼如下:
# 代碼文件:chapter4/src/ch4.2.1.kt
_hello = "HelloWorld" ①
score_for_student = 0.0 ②
y = 20 ③
y = True ④
代碼第①行、第②行和第③行分別聲明瞭三個變量,這些變量聲明不需要指定數據類型,你賦給它什麼數值,它就是該類型變量了。注意代碼第④行是給y變量賦布爾值True,雖然y已經保存了整數類型20,但它也可以接收其他類型數據。
提示
Python是動態類型語言^1,它不會檢查數據類型,在變量聲明時不需要指定數據類型。這一點與Swift和Kotlin語言不同,Swift和Kotlin雖然在聲明變量時也可以不指定數據類型,但是他們的編譯器會自動推導出該變量的數據類型,一旦該變量確定了數據類型,就不能再接收其他類型數據了,這一點與Python不同。
常量
在很多語言中常量的定義是一旦初始化後就不能再被修改。而Python不能從語法層面上定義常量,Python沒有提供一個關鍵字使得變量不能被修改。所以在Python中只能將變量當成常量使用,只是不要修改它。那麼這就帶來了一個安全隱患,可能會在無意中被修改,從而引發程序錯誤。解決此問題要麼靠程序員自律和自查;要麼通過一些技術手段使變量不能修改。
提示
Python作爲解釋性動態語言,代碼安全很多情況下需要程序員自查的。而Java和C等靜態類型語言,這些問題會在編譯期檢查出來。
註釋
Python程序註釋使用井號(#),使用時#位於註釋行的開頭,#後面有一個空格,接着是註釋內容。
另外,在第3章還介紹過文檔字符串,它也是一種註釋,只是用來註釋文檔的,文檔註釋將在第5章詳細介紹。
使用註釋示例代碼如下:
# coding=utf-8 ①
# 代碼文件:chapter4/4.3/hello.py ②
# _hello = "HelloWorld" ③
# score_for_student = 0.0 ④
y = 20
y = "大家好"
print(y) # 打印y變量 ⑤
代碼①和②行#號是進行單號註釋,#號也可連續註釋多行見代碼第③行\~第④行,可以在一條語句的尾端進行註釋見代碼第⑤行。注意代碼①行#
coding=utf-8註釋作用很特殊是設置Python代碼文件的編碼集,該註釋語句必須放在文件的第一行或第二行纔能有效。它還有替代寫法:
#!/usr/bin/python
# -*- coding: utf-8 -*-
其中#!/usr/bin/python註釋是在UNIX、Liunx和macOS等平臺上安裝多個Python版本時,具體指定哪個版本的Python解釋器。
提示
在PyCharm工具中對連續多行的註釋可以使用快捷鍵,具體步驟是:選擇多行然後按住“Ctrl+斜槓”組合鍵進行註釋。去掉註釋也是按住“Ctrl+斜槓”組合鍵。注意
在程序代碼中,對容易引起誤解的代碼進行註釋是必要的,但應避免對已清晰表達信息的代碼進行註釋。需要注意的是,頻繁的註釋有時反映了代碼的低質量。當覺得被迫要加註釋的時候,不妨考慮一下重寫代碼使其更清晰。
語句
Python代碼是由關鍵字、標識符、表達式和語句等內容構成,語句是代碼的重要組成部分。
語句關注的代碼執行過程,如if、for和while等。在Python語言中,一行代碼表示一條語句,語句結束可以加分號,也可以省略分號。
示例代碼:
# coding=utf-8
# 代碼文件:chapter4/4.4/hello.py
_hello = "HelloWorld"
score_for_student = 0.0; # 沒有錯誤發生
y = 20
name1 = "Tom"; name2 = "Tony" ①
提示
從編程規範的角度講語句結束不需要加分號,而且每行至多包含一條語句。代碼第①行的寫法是不規範的,推薦使用:
name1 = "Tom"
name2
Python還支持鏈式賦值語句,如果需要爲多個變量賦相同的數值,可以這樣表示:
a = b = c = 10
這條語句是把整數10賦值給a、b、c三個變量。
另外,在if、for和while有代碼塊的語句中,代碼塊不是通過大括號來界定的,而是通過縮進,縮進在一個級別的代碼是在相同的代碼塊中。
# coding=utf-8
# 代碼文件:chapter4/4.4/hello.py
_hello = "HelloWorld"
score_for_student = 10.0; # 沒有錯誤發生
y = 20
name1 = "Tom"; name2 = "Tony"
# 鏈式賦值語句
a = b = c = 10
if y > 10:
print(y) ①
print(score_for_student) ②
else:
print(y * 10) ③
print(_hello) ④
代碼第①行和第②行是一個同一個縮進級別,他們是在相同的代碼塊中。而代碼第③行和第④行不是在同一個縮進級別中,他們是在不同的代碼塊中。
提示
一個縮進級別一般是一個製表符(Tab)或4個空格,考慮到不同的編輯器製表符顯示的寬度不同,大部分編程語言規範推薦使用4個空格。
模塊
Python中一個模塊就是一個文件,模塊是保存代碼的最小單位,模塊中可以聲明變量、常量、函數、屬性和類等Python程序元素。一個模塊提供可以訪問另外一個模塊中的程序元素。
下面通過示例介紹模塊的使用,現有兩個模塊:module1和hello。module1模塊代碼:
# coding=utf-8
# 代碼文件:chapter4/4.5/module1.py
y = True
z = 10.10
print('進入module1模塊')
hello模塊會訪問module1模塊的變量,hello模塊代碼:
# coding=utf-8
# 代碼文件:chapter4/4.5/hello.py
import module1 ①
from module1 import z ②
y = 20
print(y) # 訪問當前模塊變量y ③
print(module1.y) # 訪問module1模塊變量y ④
print(z) # 訪問module1模塊變量z ⑤
上述代碼hello模塊訪問module1模塊的變量y和z。爲了實現這個目的,可以通過兩種import語句導入模塊module1中的代碼元素:
-
import
\<模塊名\>。代碼第①行,這種方式會導入模塊所有代碼元素,訪問時需要加“模塊名.”,見代碼第④行module1.y,module1是模塊名,y是模塊module1中的變量。 - from \<模塊名\> import
\<代碼元素\>。代碼第②行,這種方式會只是導入特定的代碼元素,訪問時不需要加“模塊名.”,見代碼第⑤行z變量,但是需要注意如果z變量在當前模塊中也有時,z不能導入,即z是當前模塊中的變量。
運行hello.py代碼輸出結果如下:
進入module1模塊
20
True
10.1
從運行結果可見import語句會運行導入的模塊,注意示例中使用了兩次import語句,但只執行一次模塊內容。
模塊事實上提供一種命名空間(namespace)^2。同一個模塊內部不能有相同名字的代碼元素,但是不同模塊可以,上述示例中的y命名的變量就是在兩個模塊中都有。
——引自於 維基百科 https://zh.wikipedia.org/wiki/命名空間
包
如果兩個相同名字的模塊,任何防止命名衝突呢?那就是使用(package),很多語言都提供了包,例如Java、Kotlin等,他們的作用都是一樣的提供一種命名空間。
創建包
重構4.5節示例,現有兩個模塊hello,他們放在不同的包com.pkg1和com.pkg2中,如圖4-1所示,從圖中可見包是按照文件夾的層次結構管理的,而且每個包下面會有一個init.py文件,它告訴解釋器這個這是一個包,這個文件內容一般情況下是空的,但可以編寫代碼。
既然包是一個文件夾加上一個空的init.py文件,那麼開發人員就可以自己在資源管理器中創建包。筆者推薦使用PyCharm工具中創建,它會創建文件夾的同時還會創建一個空的init.py文件。
具體步驟:使用PyCharm打開創建的項目,右擊項目選擇New → Python
Package菜單,如圖4-2所示,在彈出對話框中輸入包名com.pkg,其中com是一個包,pkg是它的下一個層次的包,中間用點(.)符號分隔。
包導入
包創建好後,將兩個模塊hello放到不同的包com.pkg1和com.pkg2中。由於
com.pkg1的hello模塊需要訪問com.pkg2的hello模塊中的元素。那麼任何導入呢?事實上還是通過import語句,需要在模塊前面加上包名。
重構4.5節示例,com.pkg2的hello模塊代碼:
# coding=utf-8
# 代碼文件:chapter4/4.5/com/pkg2/hello.py
y = True
z = 10.10
print('進入com.pkg2.hello模塊')
com.pkg1的hello模塊代碼:
# coding=utf-8
# 代碼文件:chapter4/4.5/com/pkg1/hello.py
import com.pkg2.hello as module1 ①
from com.pkg2.hello import z ②
y = 20
print(y) # 訪問當前模塊變量y
print(module1.y) # 訪問com.pkg2.hello模塊變量y ③
print(z) # 訪問com.pkg2.hello模塊變量z
代碼第①行是使用import語句com.pkg2.hello模塊所有代碼元素,由於com.pkg2.hello模塊名hello與當前模塊名衝突,因此需要as
module1語句爲com.pkg2.hello模塊提供一個別名module1,訪問時需要使用module1.前綴。
代碼第②行是導入com.pkg2.hello模塊中z變量。from com.pkg2.hello import
z語句可以帶有別名,該語句修改爲如下代碼:
from com.pkg2.hello import z as x
print(x) # 訪問com.pkg2.hello模塊變量z
使用別名的目的是防止發生命名衝突,也就是說要導入的z名字的變量在當前模塊總已經存在了,所以給z一個別名x。
本章小結
本章主要介紹了Python語言中最基本的語法,首先介紹了標識符和關鍵字,讀者需要掌握標識符構成,瞭解Python關鍵字。然後介紹了Python中的變量、常量、註釋和語句。最後介紹了模塊和包,其中理解模塊和包的作用,熟悉模塊和包導入方式。
配套視頻
http://edu.51cto.com/topic/1507.html
配套源代碼
http://www.zhijieketang.com/group/8
電子書
https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc
作者微博:@tony_關東昇br/>郵箱:[email protected]
智捷課堂微信公共號:zhijieketang
Python讀者服務QQ羣:628808216