Python語(yǔ)句
Python的語(yǔ)法實(shí)際上是由語(yǔ)句和表達(dá)式組成的(語(yǔ)句使用關(guān)鍵字來(lái)組成,只執(zhí)行某種操作,可以沒(méi)有返回值;而表達(dá)式?jīng)]有關(guān)鍵字,是使用數(shù)學(xué)運(yùn)算符構(gòu)成的算數(shù)表達(dá)式,是一個(gè)單純的運(yùn)算求值過(guò)程,總是返回值。表達(dá)式本身可以作為表達(dá)式語(yǔ)句,也能作為賦值語(yǔ)句的右值或if語(yǔ)句的條件等,所以表達(dá)式可以作為語(yǔ)句的組成部分,但不是必須成分)。表達(dá)式處理對(duì)象并嵌套在語(yǔ)句中,語(yǔ)句編碼操作實(shí)現(xiàn)程序的邏輯關(guān)系。語(yǔ)句還是對(duì)象生成的地方。
簡(jiǎn)單語(yǔ)句
簡(jiǎn)單語(yǔ)句由一個(gè)邏輯行構(gòu)成,在由分號(hào)分隔的單個(gè)物理行上可能存在幾個(gè)簡(jiǎn)單語(yǔ)句。常見(jiàn)的簡(jiǎn)單語(yǔ)句有賦值語(yǔ)句、表達(dá)式語(yǔ)句、assert 語(yǔ)句、del 語(yǔ)句、break 語(yǔ)句、continue 語(yǔ)句等。這里我們只簡(jiǎn)單的介紹表達(dá)式語(yǔ)句、賦值語(yǔ)句和del 語(yǔ)句,其他語(yǔ)句會(huì)在后續(xù)對(duì)應(yīng)的章節(jié)詳細(xì)介紹。

一、賦值語(yǔ)句
賦值語(yǔ)句用于(重新)將對(duì)象綁定到變量,以及修改可變對(duì)象的屬性或項(xiàng)目。
Python賦值語(yǔ)句會(huì)把對(duì)象的引用存儲(chǔ)在變量名或數(shù)據(jù)結(jié)構(gòu)的元素內(nèi)。賦值語(yǔ)句總是建立對(duì)象的引用值,而不是復(fù)制對(duì)象。因此,Python的變量更像是指針(引用),而不是數(shù)據(jù)存儲(chǔ)區(qū)域。
Python會(huì)在首次將值(即對(duì)象的引用)賦值給變量時(shí)創(chuàng)建其變量名。有些(并非全部)數(shù)據(jù)結(jié)構(gòu)元素也會(huì)在賦值時(shí)創(chuàng)建。一旦賦值了,每當(dāng)這個(gè)變量名出現(xiàn)在表達(dá)式中,就會(huì)被其所引用的值取代。變量名在引用前必須先賦值,使用尚未進(jìn)行賦值的變量名是一種錯(cuò)誤。
本節(jié)中,我們關(guān)心的是 = 語(yǔ)句,但是在Python中,賦值語(yǔ)句有一些隱性的操作。例如,模塊導(dǎo)入、函數(shù)和類(lèi)的定義、for循環(huán)變量以及函數(shù)參數(shù)全都是隱式賦值運(yùn)算。因?yàn)橘x值語(yǔ)句在任何出現(xiàn)的地方的工作原理都相同,所有這些方式都是在運(yùn)行時(shí)把變量名和對(duì)象的引用綁定起來(lái)而已。

1、基本形式(將對(duì)象賦值到單個(gè)目標(biāo))
目標(biāo)是變量名:
如果變量名沒(méi)有出現(xiàn)在當(dāng)前代碼塊的 global 或 nonlocal 語(yǔ)句中:變量名綁定到當(dāng)前局部命名空間中的對(duì)象。否則:變量名綁定到當(dāng)前全局命名空間的對(duì)象或由 nonlocal 決定的外部命名空間。
如果名稱(chēng)已綁定,則名稱(chēng)將使用新的對(duì)象重新被綁定。這可能導(dǎo)致先前綁定到名稱(chēng)的對(duì)象的引用計(jì)數(shù)達(dá)到零,導(dǎo)致對(duì)象被釋放,并且它的析構(gòu)函數(shù)(如果它有一個(gè))被調(diào)用。
目標(biāo)是屬性引用(對(duì)象):
引用中的主表達(dá)式是計(jì)算。它產(chǎn)生的對(duì)象應(yīng)該具有一個(gè)可以賦值的屬性;如果情況不是這樣,則拋出 TypeError 異常。然后要求該對(duì)象將被賦值的對(duì)象賦值給給定的屬性;如果不能做此操作,它會(huì)拋出一個(gè)異常(通常是AttributeError,但不一定)。
2、多目標(biāo)賦值
Python賦值對(duì)象的引用值(最右邊的對(duì)象)給左邊的所有目標(biāo)。
3、序列賦值
在Python中 = 左側(cè)可以接收編寫(xiě)在元組或列表中的變量, = 右側(cè)可以接受使任何類(lèi)型的序列,只要和左側(cè)序列元素長(zhǎng)度相等即可,不然會(huì)產(chǎn)生錯(cuò)誤。Python會(huì)按照位置把右側(cè)序列中的元素和左側(cè)序列中的變量從左至右相匹配,然后每一次賦值一個(gè)值。


擴(kuò)展的序列賦值
序列賦值通常要求左側(cè)變量數(shù)目與右側(cè)主體的項(xiàng)數(shù)完全一致。如果長(zhǎng)度不同的話(huà),將會(huì)得到一個(gè)錯(cuò)誤。但是一個(gè)帶有星號(hào)的變量,可以在賦值目標(biāo)中使用,以指定對(duì)于序列的一個(gè)更為通用的匹配 —— 將一個(gè)列表賦值給了帶星號(hào)的名稱(chēng),該列表收集了序列中沒(méi)有賦值給其他變量的所有項(xiàng)。

注意: 如果有多個(gè)帶星號(hào)的名稱(chēng),或者如果值少與沒(méi)有帶星號(hào)的名稱(chēng),以及帶星號(hào)的名稱(chēng)自身沒(méi)有編寫(xiě)到一個(gè)列表或元祖中,都將引發(fā)錯(cuò)誤。

4、增強(qiáng)賦值語(yǔ)句
增強(qiáng)賦值是在單個(gè)語(yǔ)句中組合運(yùn)算符的賦值語(yǔ)句:
在Python中,每個(gè)二元表達(dá)式運(yùn)算符都有對(duì)應(yīng)的增強(qiáng)賦值形式:
X += Y, X -= Y, X *= Y, X /= Y, X //= Y, X %= Y,
X **= Y,X &= Y,X |= Y, X ^= Y, X <<= Y,X >>= Y
增強(qiáng)賦值語(yǔ)句有三個(gè)優(yōu)點(diǎn):
1、程序員輸入減少。

2、左側(cè)只需計(jì)算一次,因此增強(qiáng)賦值語(yǔ)句通常執(zhí)行的更快(在完整形式 X = X + Y 中,X出現(xiàn)兩次,必須執(zhí)行兩次)。
與正常賦值不同,增強(qiáng)的賦值在計(jì)算右側(cè)之前計(jì)算左側(cè)。例如,a[i] += f(x)首先查找a [i ],然后求值f(x)并執(zhí)行加法,最后,將結(jié)果寫(xiě)回到a[i]。
3、優(yōu)化技術(shù)會(huì)自動(dòng)選擇。
對(duì)于支持原處修改的對(duì)象而言,增強(qiáng)形式會(huì)自動(dòng)執(zhí)行原處的修改運(yùn)算,而不是相比來(lái)說(shuō)速度更慢的復(fù)制。
就增強(qiáng)賦值運(yùn)算而言,在原處的運(yùn)算可作為一種優(yōu)化而應(yīng)用在可變對(duì)象上。合并對(duì)于共享對(duì)象引用產(chǎn)生的副作用可能會(huì)更少,但是,通常會(huì)比對(duì)等的原處修改形式運(yùn)行的更慢。合并操作必須創(chuàng)建一個(gè)新的對(duì)象,把左側(cè)的賦值到列表中,然后再把右側(cè)的賦值到列表中。想必而言,原處方法調(diào)用直接在一個(gè)內(nèi)存塊末尾添加項(xiàng)。
二、表達(dá)式語(yǔ)句
表達(dá)式語(yǔ)句用于計(jì)算和寫(xiě)入一個(gè)值,或者(通常)用來(lái)調(diào)用函數(shù)或方法。


三、del 語(yǔ)句
刪除是遞歸的,刪除目標(biāo)列表將遞歸刪除列表中的每個(gè)對(duì)象,從左到右。

刪除一個(gè)變量將從局部或全局命名空間中刪除該變量的綁定,取決于變量是否出現(xiàn)在相同代碼塊的global 語(yǔ)句中。如果變量沒(méi)有綁定,將拋出一個(gè)NameError 異常。
屬性引用、下標(biāo)和切片的刪除將傳遞給原始的對(duì)象;切片的刪除在一般情況下等同于賦予一個(gè)右邊類(lèi)型的空切片(但即使這點(diǎn)也是由切片的對(duì)象決定)。

《Python基礎(chǔ)手冊(cè)》系列:
Python基礎(chǔ)手冊(cè) 1 —— Python語(yǔ)言介紹
Python基礎(chǔ)手冊(cè) 2 —— Python 環(huán)境搭建(Linux)
Python基礎(chǔ)手冊(cè) 3 —— Python解釋器
Python基礎(chǔ)手冊(cè) 4 —— 文本結(jié)構(gòu)
Python基礎(chǔ)手冊(cè) 5 —— 標(biāo)識(shí)符和關(guān)鍵字
Python基礎(chǔ)手冊(cè) 6 —— 操作符
Python基礎(chǔ)手冊(cè) 7 —— 內(nèi)建函數(shù)
Python基礎(chǔ)手冊(cè) 8 —— Python對(duì)象
Python基礎(chǔ)手冊(cè) 9 —— 數(shù)字類(lèi)型
Python基礎(chǔ)手冊(cè)10 —— 序列(字符串)
Python基礎(chǔ)手冊(cè)11 —— 序列(元組&列表)
Python基礎(chǔ)手冊(cè)12 —— 序列(類(lèi)型操作)
Python基礎(chǔ)手冊(cè)13 —— 映射(字典)
Python基礎(chǔ)手冊(cè)14 —— 集合
Python基礎(chǔ)手冊(cè)15 —— 解析
Python基礎(chǔ)手冊(cè)16 —— 文件
Python基礎(chǔ)手冊(cè)17 —— 簡(jiǎn)單語(yǔ)句
Python基礎(chǔ)手冊(cè)18 —— 復(fù)合語(yǔ)句(流程控制語(yǔ)句)
Python基礎(chǔ)手冊(cè)19 —— 迭代器
Python基礎(chǔ)手冊(cè)20 —— 生成器
Python基礎(chǔ)手冊(cè)21 —— 函數(shù)的定義
Python基礎(chǔ)手冊(cè)22 —— 函數(shù)的參數(shù)
Python基礎(chǔ)手冊(cè)23 —— 函數(shù)的調(diào)用
Python基礎(chǔ)手冊(cè)24 —— 函數(shù)中變量的作用域
Python基礎(chǔ)手冊(cè)25 —— 裝飾器
Python基礎(chǔ)手冊(cè)26 —— 錯(cuò)誤 & 異常
Python基礎(chǔ)手冊(cè)27 —— 模塊
Python基礎(chǔ)手冊(cè)28 —— 模塊的高級(jí)概念
Python基礎(chǔ)手冊(cè)29 —— 包