目錄
?編輯
4.5 元組
4.5.1 定義元組
dimensions.py
4.5.2 遍歷元組中的所有值
4.5.3 修改元組變量
4.6 設置代碼格式
4.6.1 格式設置指南
4.6.2 縮進
4.6.3 行長
4.6.4 空行
4.6.5 其他格式設置指南
4.7 小結
第5章
if語句
5.1 一個簡單示例
cars.py
5.2 條件測試
5.2.1 檢查是否相等
5.2.2 檢查是否相等時不考慮大小寫
5.2.3 檢查是否不相等
toppings.py
往期快速傳送門👆(在文章最后):
4.5 元組
列表非常適合用于存儲在程序運行期間可能變化的數據集。列表是可以修改的,這對處理網 站的用戶列表或游戲中的角色列表至關重要。然而,有時候你需要創建一系列不可修改的元素, 元組可以滿足這種需求。Python將不能修改的值稱為不可變的,而不可變的列表被稱為元組。
4.5.1 定義元組
元組看起來猶如列表,但使用圓括號而不是方括號來標識。定義元組后,就可以使用索引來 訪問其元素,就像訪問列表元素一樣。
例如,如果有一個大小不應改變的矩形,可將其長度和寬度存儲在一個元組中,從而確保它 們是不能修改的:
dimensions.py
1 dimensions = (200, 50)
2 print(dimensions[0])
print(dimensions[1])
我們首先定義了元組dimensions(見1),為此我們使用了圓括號而不是方括號。接下來,我 們分別打印該元組的各個元素,使用的語法與訪問列表元素時使用的語法相同(見2):
200
50
下面來嘗試修改元組dimensions中的一個元素,看看結果如何:
dimensions = (200, 50)
1 dimensions[0] = 250
1處的代碼試圖修改第一個元素的值,導致Python返回類型錯誤消息。由于試圖修改元組的 操作是被禁止的,因此Python指出不能給元組的元素賦值:
Traceback (most recent call last):File "dimensions.py", line 3, in <module>dimensions[0] = 250
TypeError: 'tuple' object does not support item assignment
代碼試圖修改矩形的尺寸時,Python報告錯誤,這很好,因為這正是我們希望的。
4.5.2 遍歷元組中的所有值
像列表一樣,也可以使用for循環來遍歷元組中的所有值:
dimensions = (200, 50)
for dimension in dimensions:print(dimension)
就像遍歷列表時一樣,Python返回元組中所有的元素:
200
50
4.5.3 修改元組變量
雖然不能修改元組的元素,但可以給存儲元組的變量賦值。因此,如果要修改前述矩形的尺 寸,可重新定義整個元組:
1 dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:print(dimension)
2 dimensions = (400, 100)
3 print("\nModified dimensions:")
for dimension in dimensions:print(dimension)
我們首先定義了一個元組,并將其存儲的尺寸打印了出來(見1);接下來,將一個新元組 存儲到變量dimensions中(見);然后,打印新的尺寸(見3)。這次,Python不會報告任何錯 誤,因為給元組變量賦值是合法的:
Original dimensions:
200
50
Modified dimensions:
400
100
相比于列表,元組是更簡單的數據結構。如果需要存儲的一組值在程序的整個生命周期內都 不變,可使用元組。
4.6 設置代碼格式
隨著你編寫的程序越來越長,有必要了解一些代碼格式設置約定。請花時間讓你的代碼盡可 能易于閱讀;讓代碼易于閱讀有助于你掌握程序是做什么的,也可以幫助他人理解你編寫的代碼。
為確保所有人編寫的代碼的結構都大致一致,Python程序員都遵循一些格式設置約定。學會 編寫整潔的Python后,就能明白他人編寫的Python代碼的整體結構——只要他們和你遵循相同的 指南。要成為專業程序員,應從現在開始就遵循這些指南,以養成良好的習慣。
4.6.1 格式設置指南
若要提出Python語言修改建議,需要編寫Python改進提案(Python Enhancement Proposal, PEP)。PEP 8是最古老的PEP之一,它向Python程序員提供了代碼格式設置指南。PEP 8的篇幅很 長,但大都與復雜的編碼結構相關。
Python格式設置指南的編寫者深知,代碼被閱讀的次數比編寫的次數多。代碼編寫出來后, 調試時你需要閱讀它;給程序添加新功能時,需要花很長的時間閱讀代碼;與其他程序員分享代 碼時,這些程序員也將閱讀它們。
如果一定要在讓代碼易于編寫和易于閱讀之間做出選擇,Python程序員幾乎總是會選擇后 者。下面的指南可幫助你從一開始就編寫出清晰的代碼。
4.6.2 縮進
PEP 8建議每級縮進都使用四個空格,這既可提高可讀性,又留下了足夠的多級縮進空間。 在字處理文檔中,大家常常使用制表符而不是空格來縮進。對于字處理文檔來說,這樣做的 效果很好,但混合使用制表符和空格會讓Python解釋器感到迷惑。每款文本編輯器都提供了一種 設置,可將輸入的制表符轉換為指定數量的空格。你在編寫代碼時應該使用制表符鍵,但一定要 對編輯器進行設置,使其在文檔中插入空格而不是制表符。
在程序中混合使用制表符和空格可能導致極難解決的問題。如果你混合使用了制表符和空 格,可將文件中所有的制表符轉換為空格,大多數編輯器都提供了這樣的功能。
4.6.3 行長
很多Python程序員都建議每行不超過80字符。最初制定這樣的指南時,在大多數計算機中, 終端窗口每行只能容納79字符;當前,計算機屏幕每行可容納的字符數多得多,為何還要使用79 字符的標準行長呢?這里有別的原因。專業程序員通常會在同一個屏幕上打開多個文件,使用標 準行長可以讓他們在屏幕上并排打開兩三個文件時能同時看到各個文件的完整行。
PEP 8還建議 注釋的行長都不超過72字符,因為有些工具為大型項目自動生成文檔時,會在每行注釋開頭添加 格式化字符。 PEP 8中有關行長的指南并非不可逾越的紅線,有些小組將最大行長設置為99字符。在學習期間,你不用過多地考慮代碼的行長,但別忘了,協作編寫程序時,大家幾乎都遵守PEP 8指南。 在大多數編輯器中,都可設置一個視覺標志——通常是一條豎線,讓你知道不能越過的界線在什 么地方。
注意 附錄B介紹了如何配置文本編輯器,以使其:在你按制表符鍵時插入四個空格;顯示一條 垂直參考線,幫助你遵守行長不能超過79字符的約定。
4.6.4 空行
要將程序的不同部分分開,可使用空行。你應該使用空行來組織程序文件,但也不能濫用; 只要按本書的示例展示的那樣做,就能掌握其中的平衡。例如,如果你有5行創建列表的代碼, 還有3行處理該列表的代碼,那么用一個空行將這兩部分隔開是合適的。然而,你不應使用三四 個空行將它們隔開。
空行不會影響代碼的運行,但會影響代碼的可讀性。Python解釋器根據水平縮進情況來解讀 代碼,但不關心垂直間距。
4.6.5 其他格式設置指南
PEP 8還有很多其他的格式設置建議,但這些指南針對的程序大都比目前為止本書提到的程 序復雜。等介紹更復雜的Python結構時,我們再來分享相關的PEP 8指南。
4.7 小結
在本章中,你學習了:如何高效地處理列表中的元素;如何使用for循環遍歷列表,Python 如何根據縮進來確定程序的結構以及如何避免一些常見的縮進錯誤;如何創建簡單的數字列表, 以及可對數字列表執行的一些操作;如何通過切片來使用列表的一部分和復制列表。你還學習了 元組(它對不應變化的值提供了一定程度的保護),以及在代碼變得越來越復雜時如何設置格式, 使其易于閱讀。
在第5章中,你將學習如何使用if語句在不同的條件下采取不同的措施;學習如何將一組較 復雜的條件測試組合起來,并在滿足特定條件時采取相應的措施。你還將學習如何在遍歷列表時, 通過使用if語句對特定元素采取特定的措施。
第5章
if語句
5.1 一個簡單示例
下面是一個簡短的示例,演示了如何使用if語句來正確地處理特殊情形。假設你有一個汽車 列表,并想將其中每輛汽車的名稱打印出來。對于大多數汽車,都應以首字母大寫的方式打印其 名稱,但對于汽車名'bmw',應以全大寫的方式打印。下面的代碼遍歷一個列表,并以首字母大 寫的方式打印其中的汽車名,但對于汽車名'bmw',以全大寫的方式打印:
cars.py
cars = ['audi', 'bmw', 'subaru', 'toyota']
for car in cars:
1 if car == 'bmw':print(car.upper())else:print(car.title())
這個示例中的循環首先檢查當前的汽車名是否是'bmw'(見?)。如果是,就以全大寫的方式 打印它;否則就以首字母大寫的方式打印:
Audi
BMW
Subaru
Toyota
這個示例涵蓋了本章將介紹的很多概念。下面先來介紹可用來在程序中檢查條件的測試。
5.2 條件測試
每條if語句的核心都是一個值為True或False的表達式,這種表達式被稱為條件測試。Python 根據條件測試的值為True還是False來決定是否執行if語句中的代碼。如果條件測試的值為True, Python就執行緊跟在if語句后面的代碼;如果為False,Python就忽略這些代碼。
5.2.1 檢查是否相等
大多數條件測試都將一個變量的當前值同特定值進行比較。最簡單的條件測試檢查變量的值 是否與特定值相等:
1 >>> car = 'bmw'
2 >>> car == 'bmw'
True
我們首先使用一個等號將car的值設置為'bmw'(見1),這種做法你已見過很多次。接下來, 使用兩個等號(==)檢查car的值是否為'bmw'。這個相等運算符在它兩邊的值相等時返回True, 否則返回False。在這個示例中,兩邊的值相等,因此Python返回True。 如果變量car的值不是'bmw',上述測試將返回False:
1 >>> car = 'audi'
2 >>> car == 'bmw'
False
一個等號是陳述;對于1處的代碼,可解讀為“將變量car的值設置為'audi'”。兩個等號是 發問;對于2處的代碼,可解讀為“變量car的值是'bmw'嗎?”。大多數編程語言使用等號的方 式都與這里演示的相同。
5.2.2 檢查是否相等時不考慮大小寫
在Python中檢查是否相等時區分大小寫,例如,兩個大小寫不同的值會被視為不相等:
>>> car = 'Audi'
>>> car == 'audi'
False
如果大小寫很重要,這種行為有其優點。但如果大小寫無關緊要,而只想檢查變量的值,可 將變量的值轉換為小寫,再進行比較:
>>> car = 'Audi'
>>> car.lower() == 'audi'
True
無論值'Audi'的大小寫如何,上述測試都將返回True,因為該測試不區分大小寫。函數lower() 不會修改存儲在變量car中的值,因此進行這樣的比較時不會影響原來的變量:
1 >>> car = 'Audi'
2 >>> car.lower() == 'audi'
True
3 >>> car
'Audi'
在1處,我們將首字母大寫的字符串'Audi'存儲在變量car中;在2處,我們獲取變量car的 值并將其轉換為小寫,再將結果與字符串'audi'進行比較。這兩個字符串相同,因此Python返回 True。從3處的輸出可知,這個條件測試并沒有影響存儲在變量car中的值。
網站采用類似的方式讓用戶輸入的數據符合特定的格式。例如,網站可能使用類似的測試來 確保用戶名是獨一無二的,而并非只是與另一個用戶名的大小寫不同。用戶提交新的用戶名時, 將把它轉換為小寫,并與所有既有用戶名的小寫版本進行比較。執行這種檢查時,如果已經有用 戶名'john'(不管大小寫如何),則用戶提交用戶名'John'時將遭到拒絕。
5.2.3 檢查是否不相等
要判斷兩個值是否不等,可結合使用驚嘆號和等號(!=),其中的驚嘆號表示不,在很多編 程語言中都如此。
下面再使用一條if語句來演示如何使用不等運算符。我們將把要求的比薩配料存儲在一個變 量中,再打印一條消息,指出顧客要求的配料是否是意式小銀魚(anchovies):
toppings.py
requested_topping = 'mushrooms'
1 if requested_topping != 'anchovies':print("Hold the anchovies!")
1處的代碼行將requested_topping的值與'anchovies'進行比較,如果它們不相等,Python 將返回True,進而執行緊跟在if語句后面的代碼;如果這兩個值相等,Python將返回False,因此 不執行緊跟在if語句后面的代碼。
由于requested_topping的值不是'anchovies',因此執行print語句:
Hold the anchovies!
你編寫的大多數條件表達式都檢查兩個值是否相等,但有時候檢查兩個值是否不等的效率 更高。
Python:核心知識點整理大全1-筆記-CSDN博客
Python:核心知識點整理大全2-筆記-CSDN博客
Python:核心知識點整理大全3-筆記-CSDN博客
Python:核心知識點整理大全4-筆記-CSDN博客
Python:核心知識點整理大全5-筆記-CSDN博客
Python:核心知識點整理大全6-筆記-CSDN博客
Python:核心知識點整理大全7-筆記-CSDN博客