《Python從小白到大?!芬呀浬鲜?!
本章主要為大家介紹Python的一些語法,其中包括標識符、關鍵字、常量、變量、表達式、語句、注釋、模塊和包等內容。
任何一種計算機語言都離不開標識符和關鍵字,因此下面將詳細介紹Python標識符和關鍵字。
標識符就是變量、常量、函數、屬性、類、模塊和包等由程序員指定的名字。構成標識符的字符均有一定的規范,Python語言中標識符的命名規則如下:
區分大小寫:Myname與myname是兩個不同的標識符。
首字符,可以是下劃線(_)或字母,但不能是數字。
除首字符外其他字符,可以是下劃線(_)、字母和數字。
關鍵字不能作為標識符。
例如,身高、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/ch5.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中的變量。
運行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/sd/f907b
http://www.zhijieketang.com/group/8
https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc
作者微博:@tony_關東升郵箱:eorient@sina.com
br/>郵箱:eorient@sina.com
Python讀者服務QQ群:628808216
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。