Python書籍閱讀與記錄 6.10 II

我感覺這樣記錄,對於我來說挺好的。因爲我看兩端對齊的語句容易走神,這樣記錄閱讀的話,就很少出現之前的情況。

我寫的初衷,也是自己來看,所以感覺寫的不好的,請保留下意見,謝謝。

 

裏面的每一個字我都看過,加粗 括號  下劃線 等均是我的筆記。

 

我準備在接下來10天的時間把python從入門到實踐看一遍,然後把其中的重點都寫下來。

第二章 變量和簡單數據類型
在本章中,你將學習可在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 Pythonworld!”不是Python代碼,因此將其顯
示爲橙色。這種功能稱爲語
語法突
 
出 ,在你剛開始編寫程序時很有幫助。
2.2 變量
下面來嘗試在hello_world.py中使用一個變量。在這個文件開頭添加一行代碼,並對第2行代碼進行修改,如下所示:
message = "Hello Python world!"
print(message)
運行這個程序,看看結果如何。你會發現,輸出與以前相同:
Hello Python world!
我們添加了一個名爲message
變量
 。每個變量都存儲了一個值
——與變量相關聯的信息。在這裏,存儲的值爲文本“Hello Pythonworld!”
添加變量導致Python解釋器需要做更多工作。處理第1行代碼時,它將文本“Hello Pythonworld!”與變量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)(只要說到附錄,我統統沒加,體諒下,這只是我個人的筆記)。
變量名應既簡短又具有描述性。例如,namen好,student_names_n好,name_lengthlength_of_persons_name好。
慎用小寫字母l和大寫字母O,因爲它們可能被人錯看成數字10
要創建良好的變量名,需要經過一定的實踐,在程序複雜而有趣時尤其如此。隨着你編寫的程序越來越多,並開始閱讀別人編寫的代碼,將越來越善於創建有意義的變量名。 
注意
就目前而言,應使用小寫的Python變量名。在變量名中使用大寫字母雖然不會導致錯誤,但避免使用大寫字母是個不錯的主意。
2.2.2 使用變量時避免命名錯誤
程序員都會犯錯,而且大多數程序員每天都會犯錯。雖然優秀的程序員也會犯錯,但他們也知道如何高效地消除錯誤。下面來看一種你可能會犯的錯誤,並學習如何消除它。
我們將有意地編寫一些引發錯誤的代碼。請輸入下面的代碼,包括其中以粗體顯示但拼寫不正確的單詞mesage
message = "Hello Python Crash Course reader!"
print(mesage)
程序存在錯誤時,Python解釋器將竭盡所能地幫助你找出問題所在。程序無法成功地運行時,解釋器會提供一個traceback(n. 回溯)。
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 中遺漏了字母sPython解釋器不會對代碼做拼寫檢查,但要求變量名的拼寫一致。例如,如果在代碼的另一個地方也將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() 不需要額外的信息,因此它後面的括號是空的。
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() :

strip

英 /strɪp/  v 脫去

>>> 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 python2 中的print語句
Python 2中,print 語句的語法稍有不同:
>>> python2.7
>>> print "Hello Python 2.7 world!"
Hello Python 2.7 world!
Python 2中,無需將要打印的內容放在括號內。從技術上說,Python 3中的print 是一個函數,因此括號必不可少。有些Python 2 print 語句也包含括號,但其行爲與Python 3
稍有不同。簡單地說,在Python 2代碼中,有些print 語句包含括號,有些不包含。
動手試一試
 
在做下面的每個練習時,都編寫一個獨立的程序,並將其保存爲名稱類似於name_cases.py的文件。如果遇到了困難,請休息一會兒或參閱附錄C提供的建議。
2-3 個性化的消息: 將用戶的姓名存到一個變量中,並向該用戶顯示一條消息。顯示的消息應非常簡單,如“Hello Eric, would you liketo learn some Python today?”
2-4 調整名字大小寫
: 將一個人名存儲到一個變量中,再以小寫、大寫和首字母大寫的方式顯示這個人名。
2-5
言:
: 找一句你欽佩的名人說的名言,將這個名人的姓名和他的名言打印出來。輸出應類似於下面這樣(包括引號):
Albert Einstein oncesaid,“Apersonwho never madea 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,也可能是字符23像上面這樣在字符串中使用整數時,需要顯式地指出你希望Python將這個整數用作字符串。爲此,可調用函數str()
它讓Python將非字符串值表示爲字符串:
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)這樣,Python就知道你要將數值23轉換爲字符串,進而在生日祝福消息中顯示字符23。經過上述處理後,將顯示你期望的消息,而不會引發錯誤:
Happy 23rd Birthday!
大多數情況下,在Python中使用數字都非常簡單。如果結果出乎意料,請檢查Python是否按你期望的方式將數字解讀爲了數值或字符串。
2.4.4 Python 2中的整數
Python 2中,將兩個整數相除得到的結果稍有不同:
>>> python2.7
>>> 3 / 2
1
Python返回的結果爲1,而不是1.5。在Python 2中,整數除法的結果只包含整數部分,小數部分被刪除。請注意,計算整數結果時,採取的方式不是四捨五入,而是將小數部分直
接刪除。 (類似c裏面的向下取整)
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社區的理念都包含在TimPeters撰寫的“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章,你將學習如何在被稱爲列
表的變量中存儲信息集,以及如何通過遍歷列表來操作其中的信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章