Python基礎(chǔ)手冊17——簡單語句

Python語句

Python的語法實際上是由語句和表達(dá)式組成的(語句使用關(guān)鍵字來組成,只執(zhí)行某種操作,可以沒有返回值霞怀;而表達(dá)式?jīng)]有關(guān)鍵字,是使用數(shù)學(xué)運(yùn)算符構(gòu)成的算數(shù)表達(dá)式莉给,是一個單純的運(yùn)算求值過程毙石,總是返回值。表達(dá)式本身可以作為表達(dá)式語句颓遏,也能作為賦值語句的右值或if語句的條件等徐矩,所以表達(dá)式可以作為語句的組成部分,但不是必須成分)叁幢。表達(dá)式處理對象并嵌套在語句中丧蘸,語句編碼操作實現(xiàn)程序的邏輯關(guān)系。語句還是對象生成的地方遥皂。

簡單語句

簡單語句由一個邏輯行構(gòu)成,在由分號分隔的單個物理行上可能存在幾個簡單語句刽漂。常見的簡單語句有賦值語句演训、表達(dá)式語句、assert 語句贝咙、del 語句样悟、break 語句、continue 語句等。這里我們只簡單的介紹表達(dá)式語句窟她、賦值語句和del 語句陈症,其他語句會在后續(xù)對應(yīng)的章節(jié)詳細(xì)介紹。



一震糖、賦值語句

賦值語句用于(重新)將對象綁定到變量录肯,以及修改可變對象的屬性或項目。

Python賦值語句會把對象的引用存儲在變量名或數(shù)據(jù)結(jié)構(gòu)的元素內(nèi)吊说。賦值語句總是建立對象的引用值论咏,而不是復(fù)制對象。因此颁井,Python的變量更像是指針(引用)厅贪,而不是數(shù)據(jù)存儲區(qū)域。

Python會在首次將值(即對象的引用)賦值給變量時創(chuàng)建其變量名雅宾。有些(并非全部)數(shù)據(jù)結(jié)構(gòu)元素也會在賦值時創(chuàng)建养涮。一旦賦值了,每當(dāng)這個變量名出現(xiàn)在表達(dá)式中眉抬,就會被其所引用的值取代贯吓。變量名在引用前必須先賦值,使用尚未進(jìn)行賦值的變量名是一種錯誤吐辙。

本節(jié)中宣决,我們關(guān)心的是 = 語句,但是在Python中昏苏,賦值語句有一些隱性的操作尊沸。例如,模塊導(dǎo)入贤惯、函數(shù)和類的定義洼专、for循環(huán)變量以及函數(shù)參數(shù)全都是隱式賦值運(yùn)算。因為賦值語句在任何出現(xiàn)的地方的工作原理都相同孵构,所有這些方式都是在運(yùn)行時把變量名和對象的引用綁定起來而已屁商。

賦值語句的形式:


1、基本形式(將對象賦值到單個目標(biāo))

目標(biāo)是變量名:

如果變量名沒有出現(xiàn)在當(dāng)前代碼塊的 global 或 nonlocal 語句中:變量名綁定到當(dāng)前局部命名空間中的對象颈墅。否則:變量名綁定到當(dāng)前全局命名空間的對象或由 nonlocal 決定的外部命名空間蜡镶。

如果名稱已綁定,則名稱將使用新的對象重新被綁定恤筛。這可能導(dǎo)致先前綁定到名稱的對象的引用計數(shù)達(dá)到零官还,導(dǎo)致對象被釋放,并且它的析構(gòu)函數(shù)(如果它有一個)被調(diào)用毒坛。


目標(biāo)是屬性引用(對象):

引用中的主表達(dá)式是計算望伦。它產(chǎn)生的對象應(yīng)該具有一個可以賦值的屬性林说;如果情況不是這樣,則拋出 TypeError 異常屯伞。然后要求該對象將被賦值的對象賦值給給定的屬性腿箩;如果不能做此操作,它會拋出一個異常(通常是AttributeError劣摇,但不一定)珠移。


2拜姿、多目標(biāo)賦值

Python賦值對象的引用值(最右邊的對象)給左邊的所有目標(biāo)扔傅。


3、序列賦值

在Python中 = 左側(cè)可以接收編寫在元組或列表中的變量谣蠢, = 右側(cè)可以接受使任何類型的序列滑潘,只要和左側(cè)序列元素長度相等即可垢乙,不然會產(chǎn)生錯誤。Python會按照位置把右側(cè)序列中的元素和左側(cè)序列中的變量從左至右相匹配语卤,然后每一次賦值一個值追逮。

在賦值運(yùn)算中,在語句執(zhí)行時粹舵,Python會建立臨時的元祖钮孵,來存儲右側(cè)變量原始的值,分解賦值語句也是一種交換變量的值眼滤,且不需要自行創(chuàng)建臨時變量的方法:右側(cè)的元組會自動記住先前的變量的值巴席。

序列賦值甚至可以賦值嵌套序列,而Python會根據(jù)其情況分解其組成部分诅需。在這個過程中漾唉,左側(cè)對象的序列嵌套的形狀必須符合右側(cè)對象的形狀。


擴(kuò)展的序列賦值

序列賦值通常要求左側(cè)變量數(shù)目與右側(cè)主體的項數(shù)完全一致堰塌。如果長度不同的話赵刑,將會得到一個錯誤。但是一個帶有星號的變量场刑,可以在賦值目標(biāo)中使用般此,以指定對于序列的一個更為通用的匹配 —— 將一個列表賦值給了帶星號的名稱,該列表收集了序列中沒有賦值給其他變量的所有項牵现。

帶星號的變量可以出現(xiàn)在目標(biāo)中的任何位置铐懊,包含該位置的每個未賦值的對象的一個列表都將賦值給它。當(dāng)帶星號的變量出現(xiàn)在中間瞎疼,它收集其他列出的變量之間的所有內(nèi)容科乎。帶星號的變量可能只匹配單個的項,但是丑慎,總是會向其賦值一個列表。如果沒有剩下的內(nèi)容可以匹配帶星號的變量,它會被賦值一個空列表竿裂,不管該變量出現(xiàn)在哪里玉吁。

注意: 如果有多個帶星號的名稱,或者如果值少與沒有帶星號的名稱腻异,以及帶星號的名稱自身沒有編寫到一個列表或元祖中进副,都將引發(fā)錯誤。


4悔常、增強(qiáng)賦值語句

增強(qiáng)賦值是在單個語句中組合運(yùn)算符的賦值語句:

在Python中影斑,每個二元表達(dá)式運(yùn)算符都有對應(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ōu)點:

1空另、程序員輸入減少。
2蹋砚、左側(cè)只需計算一次扼菠,因此增強(qiáng)賦值語句通常執(zhí)行的更快(在完整形式 X = X + Y 中,X出現(xiàn)兩次都弹,必須執(zhí)行兩次)娇豫。

與正常賦值不同,增強(qiáng)的賦值在計算右側(cè)之前計算左側(cè)畅厢。例如冯痢,a[i] += f(x)首先查找a [i ],然后求值f(x)并執(zhí)行加法框杜,最后浦楣,將結(jié)果寫回到a[i]。
3咪辱、優(yōu)化技術(shù)會自動選擇振劳。

對于支持原處修改的對象而言,增強(qiáng)形式會自動執(zhí)行原處的修改運(yùn)算油狂,而不是相比來說速度更慢的復(fù)制历恐。

就增強(qiáng)賦值運(yùn)算而言寸癌,在原處的運(yùn)算可作為一種優(yōu)化而應(yīng)用在可變對象上。合并對于共享對象引用產(chǎn)生的副作用可能會更少弱贼,但是蒸苇,通常會比對等的原處修改形式運(yùn)行的更慢。合并操作必須創(chuàng)建一個新的對象吮旅,把左側(cè)的賦值到列表中溪烤,然后再把右側(cè)的賦值到列表中。想必而言庇勃,原處方法調(diào)用直接在一個內(nèi)存塊末尾添加項檬嘀。


二、表達(dá)式語句

表達(dá)式語句用于計算和寫入一個值责嚷,或者(通常)用來調(diào)用函數(shù)或方法鸳兽。


在Python中,你可以只使用表達(dá)式作為語句(本身只占一行)再层。因為表達(dá)式結(jié)果不會存儲贸铜,只有當(dāng)表達(dá)式工作并作為附加的效果,這樣才有意義聂受。通常只有在交互模式提示符下打印值蒿秦,或者調(diào)用函數(shù)或方法時,表達(dá)式才單獨作為語句蛋济。


三棍鳖、del 語句

刪除是遞歸的,刪除目標(biāo)列表將遞歸刪除列表中的每個對象碗旅,從左到右渡处。


刪除一個變量將從局部或全局命名空間中刪除該變量的綁定,取決于變量是否出現(xiàn)在相同代碼塊的global 語句中祟辟。如果變量沒有綁定医瘫,將拋出一個NameError 異常。

屬性引用旧困、下標(biāo)和切片的刪除將傳遞給原始的對象醇份;切片的刪除在一般情況下等同于賦予一個右邊類型的空切片(但即使這點也是由切片的對象決定)。



《Python基礎(chǔ)手冊》系列:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吼具,一起剝皮案震驚了整個濱河市僚纷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拗盒,老刑警劉巖怖竭,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陡蝇,居然都是意外死亡痊臭,警方通過查閱死者的電腦和手機(jī)哮肚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來广匙,“玉大人绽左,你說我怎么就攤上這事⊥叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵戏蔑,是天一觀的道長蹋凝。 經(jīng)常有香客問我,道長总棵,這世上最難降的妖魔是什么鳍寂? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮情龄,結(jié)果婚禮上迄汛,老公的妹妹穿的比我還像新娘。我一直安慰自己骤视,他們只是感情好鞍爱,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著专酗,像睡著了一般睹逃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祷肯,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天沉填,我揣著相機(jī)與錄音,去河邊找鬼佑笋。 笑死翼闹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蒋纬。 我是一名探鬼主播猎荠,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颠锉!你這毒婦竟也來了法牲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤琼掠,失蹤者是張志新(化名)和其女友劉穎拒垃,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓷蛙,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡悼瓮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年戈毒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片横堡。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡埋市,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出命贴,到底是詐尸還是另有隱情道宅,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布胸蛛,位于F島的核電站污茵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏葬项。R本人自食惡果不足惜泞当,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望民珍。 院中可真熱鬧襟士,春花似錦、人聲如沸嚷量。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝶溶。三九已至章喉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間身坐,已是汗流浹背秸脱。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留部蛇,地道東北人摊唇。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像涯鲁,于是被迫代替她去往敵國和親巷查。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容