學Python用哪個版本?Python2與Python3有何區別?

老男孩IT教育機構發表於2021-02-26

  為了能夠擁有更好的職業發展,不少人都會轉行學習程式設計,而python語言在程式設計中是非常受歡迎的語言之一,其就業前景好、工資待遇高,深受大家的喜歡和追捧。當我們學習python前,很多人都會考慮版本選擇問題,Python目前有兩個版本Python2和Python3,這兩個版本學習哪個好?它們之間有何區別呢?

  python3 和 python2 是不相容的,而且差異比較大,python3是不向下相容的,但是絕大多陣列件和擴充套件都是基於python2的。目前實際應用中大部分暫不考慮 Python3,有的時候注意寫相容 2/3 的程式碼。用 Python2 為主的寫新程式碼時要考慮以後遷移到 Python3 的可能性。據資料統計顯示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。

  其實python是linux上最常用的軟體之一,但是linux目前的版本大部分還是使用python2的,而且,在linux上依賴python2的程式更多一些,所以 Python3 要代替 python2 成為主流還需要幾年的時間。如果為了找工作還是學Python 2,學會了Python 2,由Python 2轉到python3也不難。

  Python2與Python3到底有何區別呢?

  1.效能

  Py3.0執行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的最佳化空間,在字串和整形操作上可以取得很好的最佳化結果。

  Py3.1效能比Py2.5慢15%,還有很大的提升空間。

  2.編碼

  Py3.X原始碼檔案預設使用utf-8編碼,這就使得以下程式碼是合法的:

  >>> 中國 = 'china'

  >>>print(中國)

  china

  3. 語法

  1)去除了<>,全部改用!=

  2)去除``,全部改用repr()

  3)關鍵詞加入as 和with,還有True,False,None

  4)整型除法返回浮點數,要得到整型結果,請使用//

  5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全域性)變數

  6)去除print語句,加入print()函式實現相同的功能。同樣的還有 exec語句,已經改為exec()函式

  4. 字串和位元組串

  1)現在字串只有str一種型別,但它跟2.x版本的unicode幾乎一樣。

  2)關於位元組串,請參閱“資料型別”的第2條目

  5.資料型別

  1)Py3.X去除了long型別,現在只有一種整型——int,但它的行為就像2.X版本的long

  2)新增了bytes型別,對應於2.X版本的八位串,定義一個bytes字面量的方法如下:

  >>> b = b'china'

  >>> type(b)

  str物件和bytes物件可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互轉化。

  >>> s = b.decode()

  >>> s

  'china'

  >>> b1 = s.encode()

  >>> b1

  b'china'

  3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函式都被廢棄。同時去掉的還有

  dict.has_key(),用 in替代它吧

  6.物件導向

  1)引入抽象基類(Abstraact Base Classes,ABCs)。

  2)容器類和迭代器類被ABCs化,所以cellections模組裡的型別比Py2.5多了很多。

  3)迭代器的next()方法改名為__next__(),並增加內建函式next(),用以呼叫迭代器的__next__()方法

  4)增加了@abstractmethod和 @abstractproperty兩個 decorator,編寫抽象方法(屬性)更加方便。

  7.異常

  1)所以異常都從 BaseException繼承,並刪除了StardardError

  2)去除了異常類的序列行為和.message屬性

  3)用 raise Exception(args)代替 raise Exception, args語法

  4)捕獲異常的語法改變,引入了as關鍵字來標識異常例項,在Py2.5中:

  >>> try:

  ... raise NotImplementedError('Error')

  ... except NotImplementedError, error:

  ... print error.message

  ...

  Error

  在Py3.0中:

  >>> try:

  raise NotImplementedError('Error')

  except NotImplementedError as error: #注意這個 as

  print(str(error))

  Error

  5)異常鏈,因為__context__在3.0a1版本中沒有實現

  8.模組變動

  1)移除了cPickle模組,可以使用pickle模組代替。最終我們將會有一個透明高效的模組。

  2)移除了imageop模組

  3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2,

  rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模組

  4)移除了bsddb模組(單獨釋出,可以從Python "bindings" for Oracle Berkeley DB獲取)

  5)移除了new模組

  6)os.tmpnam()和os.tmpfile()函式被移動到tmpfile模組下

  7)tokenize模組現在使用bytes工作。主要的入口點不再是generate_tokens,而是 tokenize.tokenize()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2759611/,如需轉載,請註明出處,否則將追究法律責任。

相關文章