- Python編程:從入門到實踐
- (美)埃里克·馬瑟斯
- 8592字
- 2019-01-05 10:15:02
第2章 變量和簡單數據類型

在本章中,你將學習可在Python程序中使用的各種數據,還將學習如何將數據存儲到變量中,以及如何在程序中使用這些變量。
2.1 運行hello_world.py時發生的情況
運行hello_world.py時,Python都做了些什么呢?下面來深入研究一下。實際上,即便是運行簡單的程序,Python所做的工作也相當多:
hello_world.py
print("Hello Python world!")
運行上述代碼時,你將看到如下輸出:
Hello Python world!
運行文件hello_world.py時,末尾的.py指出這是一個Python程序,因此編輯器將使用Python解釋器來運行它。Python解釋器讀取整個程序,確定其中每個單詞的含義。例如,看到單詞print時,解釋器就會將括號中的內容打印到屏幕,而不會管括號中的內容是什么。
編寫程序時,編輯器會以各種方式突出程序的不同部分。例如,它知道print是一個函數的名稱,因此將其顯示為藍色;它知道“Hello Python world!”不是Python代碼,因此將其顯示為橙色。這種功能稱為語法突出,在你剛開始編寫程序時很有幫助。
2.2 變量
下面來嘗試在hello_world.py中使用一個變量。在這個文件開頭添加一行代碼,并對第2行代碼進行修改,如下所示:
message = "Hello Python world!" print(message)
運行這個程序,看看結果如何。你會發現,輸出與以前相同:
Hello Python world!
我們添加了一個名為message的變量。每個變量都存儲了一個值——與變量相關聯的信息。在這里,存儲的值為文本“Hello Python world!”。
添加變量導致Python解釋器需要做更多工作。處理第1行代碼時,它將文本“Hello Python world!”與變量message關聯起來;而處理第2行代碼時,它將與變量message關聯的值打印到屏幕。
下面來進一步擴展這個程序:修改hello_world.py,使其再打印一條消息。為此,在hello_world.py中添加一個空行,再添加下面兩行代碼:
message = "Hello Python world!" print(message) message = "Hello Python Crash Course world!" print(message)
現在如果運行這個程序,將看到兩行輸出:
Hello Python world! Hello Python Crash Course world!
在程序中可隨時修改變量的值,而Python將始終記錄變量的最新值。
2.2.1 變量的命名和使用
在Python中使用變量時,需要遵守一些規則和指南。違反這些規則將引發錯誤,而指南旨在讓你編寫的代碼更容易閱讀和理解。請務必牢記下述有關變量的規則。
· 變量名只能包含字母、數字和下劃線。變量名可以字母或下劃線打頭,但不能以數字打頭,例如,可將變量命名為message_1,但不能將其命名為1_message。
· 變量名不能包含空格,但可使用下劃線來分隔其中的單詞。例如,變量名greeting_message可行,但變量名greeting message會引發錯誤。
· 不要將Python關鍵字和函數名用作變量名,即不要使用Python保留用于特殊用途的單詞,如print(請參見附錄A.4)。
· 變量名應既簡短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
· 慎用小寫字母l和大寫字母O,因為它們可能被人錯看成數字1和0。
要創建良好的變量名,需要經過一定的實踐,在程序復雜而有趣時尤其如此。隨著你編寫的程序越來越多,并開始閱讀別人編寫的代碼,將越來越善于創建有意義的變量名。
注意 就目前而言,應使用小寫的Python變量名。在變量名中使用大寫字母雖然不會導致錯誤,但避免使用大寫字母是個不錯的主意。
2.2.2 使用變量時避免命名錯誤
程序員都會犯錯,而且大多數程序員每天都會犯錯。雖然優秀的程序員也會犯錯,但他們也知道如何高效地消除錯誤。下面來看一種你可能會犯的錯誤,并學習如何消除它。
我們將有意地編寫一些引發錯誤的代碼。請輸入下面的代碼,包括其中以粗體顯示但拼寫不正確的單詞mesage:
message = "Hello Python Crash Course reader!"
print(mesage)
程序存在錯誤時,Python解釋器將竭盡所能地幫助你找出問題所在。程序無法成功地運行時,解釋器會提供一個traceback。traceback是一條記錄,指出了解釋器嘗試運行代碼時,在什么地方陷入了困境。下面是你不小心錯誤地拼寫了變量名時,Python解釋器提供的traceback:
Traceback (most recent call last): File "hello_world.py", line 2, in <module> ? print(mesage) ? NameError: name 'mesage' is not defined ?
解釋器指出,文件hello_world.py的第2行存在錯誤(見?);它列出了這行代碼,旨在幫助你快速找出錯誤(見?);它還指出了它發現的是什么樣的錯誤(見?)。在這里,解釋器發現了一個名稱錯誤,并指出打印的變量mesage未定義:Python無法識別你提供的變量名。名稱錯誤通常意味著兩種情況:要么是使用變量前忘記了給它賦值,要么是輸入變量名時拼寫不正確。
在這個示例中,第2行的變量名message中遺漏了字母s。Python解釋器不會對代碼做拼寫檢查,但要求變量名的拼寫一致。例如,如果在代碼的另一個地方也將message錯誤地拼寫成了mesage,結果將如何呢?
mesage = "Hello Python Crash Course reader!" print(mesage)
在這種情況下,程序將成功地運行:
Hello Python Crash Course reader!
計算機一絲不茍,但不關心拼寫是否正確。因此,創建變量名和編寫代碼時,你無需考慮英語中的拼寫和語法規則。
很多編程錯誤都很簡單,只是在程序的某一行輸錯了一個字符。為找出這種錯誤而花費很長時間的大有人在。很多程序員天資聰穎、經驗豐富,卻為找出這種細微的錯誤花費數小時。你可能覺得這很好笑,但別忘了,在你的編程生涯中,經常會有同樣的遭遇。
注意 要理解新的編程概念,最佳的方式是嘗試在程序中使用它們。如果你在做本書的練習時陷入了困境,請嘗試做點其他的事情。如果這樣做后依然無法擺脫困境,請復習相關內容。如果這樣做后情況依然如故,請參閱附錄C的建議。
動手試一試
請完成下面的練習,在做每個練習時,都編寫一個獨立的程序。保存每個程序時,使用符合標準Python約定的文件名:使用小寫字母和下劃線,如simple_message.py和simple_messages.py。
2-1 簡單消息:將一條消息存儲到變量中,再將其打印出來。
2-2 多條簡單消息:將一條消息存儲到變量中,將其打印出來;再將變量的值修改為一條新消息,并將其打印出來。
2.3 字符串
大多數程序都定義并收集某種數據,然后使用它們來做些有意義的事情。鑒于此,對數據進行分類大有裨益。我們將介紹的第一種數據類型是字符串。字符串雖然看似簡單,但能夠以很多不同的方式使用它們。
字符串就是一系列字符。在Python中,用引號括起的都是字符串,其中的引號可以是單引號,也可以是雙引號,如下所示:
"This is a string." 'This is also a string.'
這種靈活性讓你能夠在字符串中包含引號和撇號:
'I told my friend, "Python is my favorite language!"' "The language 'Python' is named after Monty Python, not the snake." "One of Python's strengths is its diverse and supportive community."
下面來看一些使用字符串的方式。
2.3.1 使用方法修改字符串的大小寫
對于字符串,可執行的最簡單的操作之一是修改其中的單詞的大小寫。請看下面的代碼,并嘗試判斷其作用:
name.py
name = "ada lovelace" print(name.title())
將這個文件保存為name.py,再運行它。你將看到如下輸出:
Ada Lovelace
在這個示例中,小寫的字符串"ada lovelace"存儲到了變量name中。在print()語句中,方法title()出現在這個變量的后面。方法是Python可對數據執行的操作。在name.title()中,name后面的句點(.)讓Python對變量name執行方法title()指定的操作。每個方法后面都跟著一對括號,這是因為方法通常需要額外的信息來完成其工作。這種信息是在括號內提供的。函數title()不需要額外的信息,因此它后面的括號是空的。
title()以首字母大寫的方式顯示每個單詞,即將每個單詞的首字母都改為大寫。這很有用,因為你經常需要將名字視為信息。例如,你可能希望程序將值Ada、ADA和ada視為同一個名字,并將它們都顯示為Ada。
還有其他幾個很有用的大小寫處理方法。例如,要將字符串改為全部大寫或全部小寫,可以像下面這樣做:
name = "Ada Lovelace" print(name.upper()) print(name.lower())
這些代碼的輸出如下:
ADA LOVELACE ada lovelace
存儲數據時,方法lower()很有用。很多時候,你無法依靠用戶來提供正確的大小寫,因此需要將字符串先轉換為小寫,再存儲它們。以后需要顯示這些信息時,再將其轉換為最合適的大小寫方式。
2.3.2 合并(拼接)字符串
在很多情況下,都需要合并字符串。例如,你可能想將姓和名存儲在不同的變量中,等要顯示姓名時再將它們合而為一:
first_name = "ada" last_name = "lovelace" full_name = first_name+" "+last_name ? print(full_name)
Python使用加號(+)來合并字符串。在這個示例中,我們使用+來合并first_name、空格和last_name,以得到完整的姓名(見?),其結果如下:
ada lovelace
這種合并字符串的方法稱為拼接。通過拼接,可使用存儲在變量中的信息來創建完整的消息。下面來看一個例子:
first_name = "ada" last_name = "lovelace" full_name = first_name+" "+last_name print("Hello, "+full_name.title()+"!") ?
在這里,一個問候用戶的句子中使用了全名(見?),并使用了方法title()來將姓名設置為合適的格式。這些代碼顯示一條格式良好的簡單問候語:
Hello, Ada Lovelace!
你可以使用拼接來創建消息,再把整條消息都存儲在一個變量中:
first_name = "ada" last_name = "lovelace" full_name = first_name+" "+last_name message = "Hello, "+full_name.title()+"!" ? print(message) ?
上述代碼也顯示消息“Hello, Ada Lovelace!”,但將這條消息存儲在了一個變量中(見?),這讓最后的print語句簡單得多(見?)。
2.3.3 使用制表符或換行符來添加空白
在編程中,空白泛指任何非打印字符,如空格、制表符和換行符。你可使用空白來組織輸出,以使其更易讀。
要在字符串中添加制表符,可使用字符組合\t,如下述代碼的?處所示:
>>>print("Python") Python >>>print("\tPython") ? Python
要在字符串中添加換行符,可使用字符組合\n:
>>>print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript
還可在同一個字符串中同時包含制表符和換行符。字符串"\n\t"讓Python換到下一行,并在下一行開頭添加一個制表符。下面的示例演示了如何使用一個單行字符串來生成四行輸出:
>>>print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
Python
C
JavaScript
在接下來的兩章中,你將使用為數不多的幾行代碼來生成很多行輸出,屆時制表符和換行符將提供極大的幫助。
2.3.4 刪除空白
在程序中,額外的空白可能令人迷惑。對程序員來說,'python'和'python '看起來幾乎沒什么兩樣,但對程序來說,它們卻是兩個不同的字符串。Python能夠發現'python '中額外的空白,并認為它是有意義的——除非你告訴它不是這樣的。
空白很重要,因為你經常需要比較兩個字符串是否相同。例如,一個重要的示例是,在用戶登錄網站時檢查其用戶名。但在一些簡單得多的情形下,額外的空白也可能令人迷惑。所幸在Python中,刪除用戶輸入的數據中的多余的空白易如反掌。
Python能夠找出字符串開頭和末尾多余的空白。要確保字符串末尾沒有空白,可使用方法rstrip()。
>>>favorite_language = 'python ' ? >>>favorite_language ? 'python ' >>>favorite_language.rstrip() ? 'python' >>>favorite_language ? 'python '
存儲在變量favorite_language中的字符串末尾包含多余的空白(見?)。你在終端會話中向Python詢問這個變量的值時,可看到末尾的空格(見?)。對變量favorite_language調用方法rstrip()后(見?),這個多余的空格被刪除了。然而,這種刪除只是暫時的,接下來再次詢問favorite_language的值時,你會發現這個字符串與輸入時一樣,依然包含多余的空白(見?)。
要永久刪除這個字符串中的空白,必須將刪除操作的結果存回到變量中:
>>>favorite_language = 'python ' >>>favorite_language = favorite_language.rstrip() ? >>>favorite_language 'python'
為刪除這個字符串中的空白,你需要將其末尾的空白剔除,再將結果存回到原來的變量中(見?)。在編程中,經常需要修改變量的值,再將新值存回到原來的變量中。這就是變量的值可能隨程序的運行或用戶輸入數據而發生變化的原因。
你還可以剔除字符串開頭的空白,或同時剔除字符串兩端的空白。為此,可分別使用方法lstrip()和strip():
>>>favorite_language = ' python ' ? >>>favorite_language.rstrip() ? ' python' >>>favorite_language.lstrip() ? 'python ' >>>favorite_language.strip() ? 'python'
在這個示例中,我們首先創建了一個開頭和末尾都有空白的字符串(見?)。接下來,我們分別刪除末尾(見?)、開頭(見?)和兩端(見?)的空格。嘗試使用這些剝除函數有助于你熟悉字符串操作。在實際程序中,這些剝除函數最常用于在存儲用戶輸入前對其進行清理。
2.3.5 使用字符串時避免語法錯誤
語法錯誤是一種時不時會遇到的錯誤。程序中包含非法的Python代碼時,就會導致語法錯誤。例如,在用單引號括起的字符串中,如果包含撇號,就將導致錯誤。這是因為這會導致Python將第一個單引號和撇號之間的內容視為一個字符串,進而將余下的文本視為Python代碼,從而引發錯誤。
下面演示了如何正確地使用單引號和雙引號。請將該程序保存為apostrophe.py,再運行它:
apostrophe.py
message = "One of Python's strengths is its diverse community." print(message)
撇號位于兩個雙引號之間,因此Python解釋器能夠正確地理解這個字符串:
One of Python's strengths is its diverse community.
然而,如果你使用單引號,Python將無法正確地確定字符串的結束位置:
message = 'One of Python's strengths is its diverse community.' print(message)
而你將看到如下輸出:
File "apostrophe.py", line 1 message = 'One of Python's strengths is its diverse community.' ^? SyntaxError: invalid syntax
從上述輸出可知,錯誤發生在第二個單引號后面(見?)。這種語法錯誤表明,在解釋器看來,其中的有些內容不是有效的Python代碼。錯誤的來源多種多樣,這里指出一些常見的。學習編寫Python代碼時,你可能會經常遇到語法錯誤。語法錯誤也是最不具體的錯誤類型,因此可能難以找出并修復。受困于非常棘手的錯誤時,請參閱附錄C提供的建議。
注意 編寫程序時,編輯器的語法突出功能可幫助你快速找出某些語法錯誤。看到Python代碼以普通句子的顏色顯示,或者普通句子以Python代碼的顏色顯示時,就可能意味著文件中存在引號不匹配的情況。
2.3.6 Python 2中的print語句
在Python 2中,print語句的語法稍有不同:
> python2.7 >>> print "Hello Python 2.7 world!" Hello Python 2.7 world!
在Python 2中,無需將要打印的內容放在括號內。從技術上說,Python 3中的print是一個函數,因此括號必不可少。有些Python 2print語句也包含括號,但其行為與Python 3中稍有不同。簡單地說,在Python 2代碼中,有些print語句包含括號,有些不包含。
動手試一試
在做下面的每個練習時,都編寫一個獨立的程序,并將其保存為名稱類似于name_cases.py的文件。如果遇到了困難,請休息一會兒或參閱附錄C提供的建議。
2-3 個性化消息:將用戶的姓名存到一個變量中,并向該用戶顯示一條消息。顯示的消息應非常簡單,如“Hello Eric, would you like to learn some Python today?”。
2-4 調整名字的大小寫:將一個人名存儲到一個變量中,再以小寫、大寫和首字母大寫的方式顯示這個人名。
2-5 名言:找一句你欽佩的名人說的名言,將這個名人的姓名和他的名言打印出來。輸出應類似于下面這樣(包括引號):
Albert Einstein once said, “A person who never made a mistake never tried anything new.”
2-6 名言2:重復練習2-5,但將名人的姓名存儲在變量famous_person中,再創建要顯示的消息,并將其存儲在變量message中,然后打印這條消息。
2-7 剔除人名中的空白:存儲一個人名,并在其開頭和末尾都包含一些空白字符。務必至少使用字符組合"\t"和"\n"各一次。
打印這個人名,以顯示其開頭和末尾的空白。然后,分別使用剔除函數lstrip()、rstrip()和strip()對人名進行處理,并將結果打印出來。
2.4 數字
在編程中,經常使用數字來記錄游戲得分、表示可視化數據、存儲Web應用信息等。Python根據數字的用法以不同的方式處理它們。鑒于整數使用起來最簡單,下面就先來看看Python是如何管理它們的。
2.4.1 整數
在Python中,可對整數執行加(+)減(-)乘(*)除(/)運算。
>>>2+3 5 >>>3 - 2 1 >>>2 * 3 6 >>>3 / 2 1.5
在終端會話中,Python直接返回運算結果。Python使用兩個乘號表示乘方運算:
>>>3 ** 2 9 >>>3 ** 3 27 >>>10 ** 6 1000000
Python還支持運算次序,因此你可在同一個表達式中使用多種運算。你還可以使用括號來修改運算次序,讓Python按你指定的次序執行運算,如下所示:
>>>2+3*4 14 >>>(2+3) * 4 20
在這些示例中,空格不影響Python計算表達式的方式,它們的存在旨在讓你閱讀代碼時,能迅速確定先執行哪些運算。
2.4.2 浮點數
Python將帶小數點的數字都稱為浮點數。大多數編程語言都使用了這個術語,它指出了這樣一個事實:小數點可出現在數字的任何位置。每種編程語言都須細心設計,以妥善地處理浮點數,確保不管小數點出現在什么位置,數字的行為都是正常的。
從很大程度上說,使用浮點數時都無需考慮其行為。你只需輸入要使用的數字,Python通常都會按你期望的方式處理它們:
>>>0.1+0.1 0.2 >>>0.2+0.2 0.4 >>>2 * 0.1 0.2 >>>2 * 0.2 0.4
但需要注意的是,結果包含的小數位數可能是不確定的:
>>>0.2+0.1 0.30000000000000004 >>>3 * 0.1 0.30000000000000004
所有語言都存在這種問題,沒有什么可擔心的。Python會盡力找到一種方式,以盡可能精確地表示結果,但鑒于計算機內部表示數字的方式,這在有些情況下很難。就現在而言,暫時忽略多余的小數位數即可;在第二部分的項目中,你將學習在需要時處理多余小數位的方式。
2.4.3 使用函數str()避免類型錯誤
你經常需要在消息中使用變量的值。例如,假設你要祝人生日快樂,可能會編寫類似于下面的代碼:
birthday.py
age = 23 message = "Happy "+age+"rd Birthday!" print(message)
你可能認為,上述代碼會打印一條簡單的生日祝福語:Happy 23rd birthday!。但如果你運行這些代碼,將發現它們會引發錯誤:
Traceback (most recent call last): File "birthday.py", line 2, in <module> message = "Happy "+age+"rd Birthday!" TypeError: Can't convert 'int' object to str implicitly ?
這是一個類型錯誤,意味著Python無法識別你使用的信息。在這個示例中,Python發現你使用了一個值為整數(int)的變量,但它不知道該如何解讀這個值(見?)。Python知道,這個變量表示的可能是數值23,也可能是字符2和3。像上面這樣在字符串中使用整數時,需要顯式地指出你希望Python將這個整數用作字符串。為此,可調用函數str(),它讓Python將非字符串值表示為字符串:
age = 23 message = "Happy "+str(age)+"rd Birthday!" print(message)
這樣,Python就知道你要將數值23轉換為字符串,進而在生日祝福消息中顯示字符2和3。經過上述處理后,將顯示你期望的消息,而不會引發錯誤:
Happy 23rd Birthday!
大多數情況下,在Python中使用數字都非常簡單。如果結果出乎意料,請檢查Python是否按你期望的方式將數字解讀為了數值或字符串。
2.4.4 Python 2中的整數
在Python 2中,將兩個整數相除得到的結果稍有不同:
>>>python2.7 >>>3 / 2 1
Python返回的結果為1,而不是1.5。在Python 2中,整數除法的結果只包含整數部分,小數部分被刪除。請注意,計算整數結果時,采取的方式不是四舍五入,而是將小數部分直接刪除。
在Python 2中,若要避免這種情況,務必確保至少有一個操作數為浮點數,這樣結果也將為浮點數:
>>>3 / 2 1 >>>3.0 / 2 1.5 >>>3 / 2.0 1.5 >>>3.0 / 2.0 1.5
從Python 3轉而用Python 2或從Python 2轉而用Python 3時,這種除法行為常常會令人迷惑。使用或編寫同時使用浮點數和整數的代碼時,一定要注意這種異常行為。
動手試一試
2-8 數字8:編寫4個表達式,它們分別使用加法、減法、乘法和除法運算,但結果都是數字8。為使用print語句來顯示結果,務必將這些表達式用括號括起來,也就是說,你應該編寫4行類似于下面的代碼:
print(5+3)
輸出應為4行,其中每行都只包含數字8。
2-9 最喜歡的數字:將你最喜歡的數字存儲在一個變量中,再使用這個變量創建一條消息,指出你最喜歡的數字,然后將這條消息打印出來。
2.5 注釋
在大多數編程語言中,注釋都是一項很有用的功能。本書前面編寫的程序中都只包含Python代碼,但隨著程序越來越大、越來越復雜,就應在其中添加說明,對你解決問題的方法進行大致的闡述。注釋讓你能夠使用自然語言在程序中添加說明。
2.5.1 如何編寫注釋
在Python中,注釋用井號(#)標識。井號后面的內容都會被Python解釋器忽略,如下所示:
comment.py
# 向大家問好 print("Hello Python people!")
Python解釋器將忽略第1行,只執行第2行。
Hello Python people!
2.5.2 該編寫什么樣的注釋
編寫注釋的主要目的是闡述代碼要做什么,以及是如何做的。在開發項目期間,你對各個部分如何協同工作了如指掌,但過段時間后,有些細節你可能不記得了。當然,你總是可以通過研究代碼來確定各個部分的工作原理,但通過編寫注釋,以清晰的自然語言對解決方案進行概述,可節省很多時間。
要成為專業程序員或與其他程序員合作,就必須編寫有意義的注釋。當前,大多數軟件都是合作編寫的,編寫者可能是同一家公司的多名員工,也可能是眾多致力于同一個開源項目的人員。訓練有素的程序員都希望代碼中包含注釋,因此你最好從現在開始就在程序中添加描述性注釋。作為新手,最值得養成的習慣之一是,在代碼中編寫清晰、簡潔的注釋。
如果不確定是否要編寫注釋,就問問自己,找到合理的解決方案前,是否考慮了多個解決方案。如果答案是肯定的,就編寫注釋對你的解決方案進行說明吧。相比回過頭去再添加注釋,刪除多余的注釋要容易得多。從現在開始,本書的示例都將使用注釋來闡述代碼的工作原理。
動手試一試
2-10 添加注釋:選擇你編寫的兩個程序,在每個程序中都至少添加一條注釋。如果程序太簡單,實在沒有什么需要說明的,就在程序文件開頭加上你的姓名和當前日期,再用一句話闡述程序的功能。
2.6 Python之禪
編程語言Perl曾在互聯網領域長期占據著統治地位,早期的大多數交互式網站使用的都是Perl腳本。彼時,“解決問題的辦法有多個”被Perl社區奉為座右銘。這種理念一度深受大家的喜愛,因為這種語言固有的靈活性使得大多數問題都有很多不同的解決之道。在開發項目期間,這種靈活性是可以接受的,但大家最終認識到,過于強調靈活性會導致大型項目難以維護:要通過研究代碼搞清楚當時解決復雜問題的人是怎么想的,既困難又麻煩,還會耗費大量的時間。
經驗豐富的程序員倡導盡可能避繁就簡。Python社區的理念都包含在Tim Peters撰寫的“Python之禪”中。要獲悉這些有關編寫優秀Python代碼的指導原則,只需在解釋器中執行命令import this。這里不打算贅述整個“Python之禪”,而只與大家分享其中的幾條原則,讓你明白為何它們對Python新手來說至關重要。
>>>import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Python程序員篤信代碼可以編寫得漂亮而優雅。編程是要解決問題的,設計良好、高效而漂亮的解決方案都會讓程序員心生敬意。隨著你對Python的認識越來越深入,并使用它來編寫越來越多的代碼,有一天也許會有人站在你后面驚呼:“哇,代碼編寫得真是漂亮!”
Simple is better than complex.
如果有兩個解決方案,一個簡單,一個復雜,但都行之有效,就選擇簡單的解決方案吧。這樣,你編寫的代碼將更容易維護,你或他人以后改進這些代碼時也會更容易。
Complex is better than complicated.
現實是復雜的,有時候可能沒有簡單的解決方案。在這種情況下,就選擇最簡單可行的解決方案吧。
Readability counts.
即便是復雜的代碼,也要讓它易于理解。開發的項目涉及復雜代碼時,一定要為這些代碼編寫有益的注釋。
There should be one-- and preferably only one --obvious way to do it.
如果讓兩名Python程序員去解決同一個問題,他們提供的解決方案應大致相同。這并不是說編程沒有創意空間,而是恰恰相反!然而,大部分編程工作都是使用常見解決方案來解決簡單的小問題,但這些小問題都包含在更龐大、更有創意空間的項目中。在你的程序中,各種具體細節對其他Python程序員來說都應易于理解。
Now is better than never.
你可以將余生都用來學習Python和編程的紛繁難懂之處,但這樣你什么項目都完不成。不要企圖編寫完美無缺的代碼;先編寫行之有效的代碼,再決定是對其做進一步改進,還是轉而去編寫新代碼。
等你進入下一章,開始研究更復雜的主題時,務必牢記這種簡約而清晰的理念。如此,經驗豐富的程序員定將對你編寫的代碼心生敬意,進而樂意向你提供反饋,并與你合作開發有趣的項目。
動手試一試
2-11 Python之禪:在Python終端會話中執行命令import this,并粗略地瀏覽一下其他的指導原則。
2.7 小結
在本章中,你學習了:如何使用變量;如何創建描述性變量名以及如何消除名稱錯誤和語法錯誤;字符串是什么,以及如何使用小寫、大寫和首字母大寫方式顯示字符串;使用空白來顯示整潔的輸出,以及如何剔除字符串中多余的空白;如何使用整數和浮點數;使用數值數據時需要注意的意外行為。你還學習了如何編寫說明性注釋,讓代碼對你和其他人來說更容易理解。最后,你了解了讓代碼盡可能簡單的理念。
在第3章,你將學習如何在被稱為列表的變量中存儲信息集,以及如何通過遍歷列表來操作其中的信息。
- 編程卓越之道(卷3):軟件工程化
- C/C++算法從菜鳥到達人
- Visual Basic程序設計與應用實踐教程
- 程序員修煉之道:通向務實的最高境界(第2版)
- PHP從入門到精通(第4版)(軟件開發視頻大講堂)
- 深入剖析Java虛擬機:源碼剖析與實例詳解(基礎卷)
- Kotlin開發教程(全2冊)
- 編寫高質量代碼:改善Objective-C程序的61個建議
- Android高級開發實戰:UI、NDK與安全
- 快樂編程:青少年思維訓練
- jQuery Mobile Web Development Essentials(Second Edition)
- Raspberry Pi Robotic Projects
- Illustrator CS6中文版應用教程(第二版)
- 深度學習的數學:使用Python語言
- Computer Vision with Python 3