《Python基礎教程》(第2版修訂版)中要注意的地方


想必現在大家學習Python都會用3.0及以上的版本了,雖然2.X的版本依然很多,但是這兩年隨着部分開源項目不再支持2.X版本,3.X已經成為趨勢。

正是在這樣的大背景下,我最近用這本《Python基礎教程》做教材的時候,發現作者的語句主要是基於Python 2.5版本寫成的,2014年進行第二版修訂的時候,也沒有明確出2.X與3.X的區別,但是現在這些語句會對使用3.X版本的初學者朋友引起誤導,下面我就隨着這本書的使用過程,更新一下遇到的一些問題,希望遇到問題的初學者們不要感到困擾。

首先說一下教材的信息,因為版本很重要

《Python基礎教程(第2版 修訂版)》  ISBN:9787115353528

問題及解決思路如下,不斷更新,我也是新人,望批評指正。

1.關於input和raw_input

在1.11.4節(21頁)提到input和raw_input的比較,但是在3.X的Python版本中,已經用input代替了raw_input了,本小節最后還特別提醒“除非對input有特別的需要,否則應該盡可能使用raw_input函數”,這句話可能在2.X的版本中適用,但是在3.X的版本是無效的,在這里應該單獨點一下兩個版本在這兩個函數上的差異呢,而不是直接提倡用raw_input函數,因為在3.X版本中raw_input已經不存在了。

2.關於print

print在3.X的版本中print已經成為一個函數,因此直接用 print “Hello,World!”此類的語句,就會報錯了,望初學者注意,要用print(參數),同樣的,exce在Python3.X的版本中同print有相同的變化,作為函數使用,同樣exce使用方式也發生了此類變化。

關於print,作為函數使用,其實與C語言的printf()函數的使用方式類似,只是Python里的函數使用方式更加靈活多變。

通過help(print)可以看到print函數的參數列表如下所示:

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

其中value是輸入值,可以有多個參數,傳遞到print函數里面是作為元祖(param1,param2,……)處理的,之后的幾個關鍵詞函數參數分別控制着輸出格式等。

sep:指定前面傳入的一系列參數之間用什么符號連接,默認是空格

end:指定輸出后最后一個字符是什么,默認是換行符,但是可以根據實際情況設置不換行為空或者其它特殊符號等,這也解決了Python2經常print輸出自動換行不容易控制的問題

file:指定輸出內容到哪個文件中,默認就是輸出到當前的標准輸出流里。

flush:用來指示緩存的開關標志,默認為False,既輸出在內存緩存里,不刷新到文件中,當值為True時,輸出的內容會立即刷新到輸出文件中。

3.內建函數cmp

cmp內建函數在Python 3.X中已經被刪除了,被operator模塊中的函數代替,如果想做比較功能,可以考慮導入operator模塊,用以下函數實現:

 1 operator.lt(a, b) 
 2 operator.le(a, b) 
 3 operator.eq(a, b) 
 4 operator.ne(a, b) 
 5 operator.ge(a, b) 
 6 operator.gt(a, b) 
 7 operator.__lt__(a, b) 
 8 operator.__le__(a, b) 
 9 operator.__eq__(a, b) 
10 operator.__ne__(a, b) 
11 operator.__ge__(a, b) 
12 operator.__gt__(a, b)

lt(a, b) 相當於 a < b       #less than 小於
le(a,b) 相當於 a <= b    #less than or equal  小於等於
eq(a,b) 相當於 a == b   #equal  等於
ne(a,b) 相當於 a != b    #not equal 不等於

ge(a, b)相當於 a>= b   #greater equal 大於等於

gt(a,b) 相當於 a > b      #greater than  大於

這些函數的返回值為布爾值

 4.關於字符串格式化的問題

這個問題只是在這里簡單一提,詳細的使用方法大家可以去參照文檔的介紹或者Google

Python 2.X中使用從C語言借鑒來的格式化方法,如 "%s   %d  %f"  % (str, int , float)這個樣式,在Python 3.X的版本中,為了更靈活的使用Python的數據結構(列表、元祖、字典、集合),新版本中推薦使用format函數進行字符串格式化,也更加靈活了,具體使用大家自己查查資料。

5.關於字典的方法has_key()

Python 3.X的版本中,判斷字典中是否含有某個鍵時,已經無法使用has_key()的方式,只能用in,如‘name’ in d,另外,in的效率也比has_key()的效率高,因為不管是為了代碼兼容還是效率問題,推薦使用in。

6.關於范圍函數range()與xrange()

在Python 3.X中,range被轉換成xrange風格的函數,因此xrange在3.X的版本中就沒有存在的必要了,直接用range就行。

7.數據類型long

在Python3.X的版本中,long類型已經不存在了,老int和long的范圍統一使用int表示,可以進行高精度運算。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM