新手學python哪一個版本好?Python2與Python3有何區別?

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

  python3 和 python2 是不兼容的,並且差別比較大,python3是不向下兼容的,可是絕大多數組件和擴展都是基於python2的。目前實際應用中大部分暫不考慮 Python3,有的時候注意寫兼容 2/3 的代碼。用 Python2 爲主的寫新代碼時要考慮之後遷移到 Python3 的可能性。據數據統計顯示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。linux

  其實python是linux上最經常使用的軟件之一,可是linux目前的版本大部分仍是使用python2的,並且,在linux上依賴python2的程序更多一些,因此 Python3 要代替 python2 成爲主流還須要幾年的時間。若是爲了找工做仍是學Python 2,學會了Python 2,由Python 2轉到python3也不難。編程

  Python2與Python3到底有何區別呢?數組

  1.性能ide

  Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認爲Py3.0有極大的優化空間,在字符串和整形操做上能夠取得很好的優化結果。函數

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

  2.編碼學習

  Py3.X源碼文件默認使用utf-8編碼,這就使得如下代碼是合法的:優化

  >>> 中國 = 'china'ui

  >>>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()

相關文章
相關標籤/搜索