回覆列表
  • 1 # 叻道

    實話說,這種純資訊類問題你在網上搜索比在這裡問更容易得到好的答案。

    或者你去看python3的官方頁面,那應該也會介紹Python3的新特性,否則怎麼吸引使用者更新。

  • 2 # 你看我獨角獸嗎

    什麼是Python 2?

    Python 2使程式碼開發過程比早期版本更容易。它實現了Python增強建議(PEP)的技術細節。Python 2.7(2.x中的最新版本)已不再開發,並將於2020年停產。

    什麼是Python 3?

    在2008年12月,Python釋出了3.0版。該版本的釋出主要是為了解決Python 2中存在的問題。這些更改的性質是,Python 3與Python 2不相容。它向後不相容 Python 3的某些功能已被反向移植到Python 2.x版本中,以實現在Python 3中輕鬆進行遷移過程。

    因此,對於使用Python 2.x版本的任何組織,將其專案遷移到3.x都需要進行大量更改。這些更改不僅涉及專案和應用程式,還涉及構成Python生態系統一部分的所有庫。

    使用哪個Python版本?

    就當今的Python版本2與版本3而言,Python 3絕對是贏家。這是因為Python 2將在2020年之後不可用。大規模採用Python 3是未來的明確方向。

    考慮到對Python 2程式語言的支援下降以及從Python 3升級中獲得更多好處之後,始終建議新開發人員選擇Python版本3。但是,如果一項工作需要Python 2功能,那將是唯一令人信服的理由使用這個版本。

    關鍵區別Python 3語法更簡單易懂,而Python 2語法則相對難以理解。Python 3的預設字串儲存為Unicode,而Python 2的儲存則需要使用“ u”定義Unicode字串值。Python 3變數的值永不變,而在Python 2中,在for迴圈中使用全域性變數時,其全域性變數值將改變。Python 3異常應放在括號中,而Python 2異常應放在符號中。簡化了Python 3的順序比較規則,而簡化了Python 2的順序比較規則。Python 3提供了Range()函式來執行迭代,而在Python 2中,xrange()用於迭代。

  • 3 # 波波聊科技

    語法

    print不再是語句,而是函式,比如原來是 print "abc" 現在是 print("abc")但是 python2.6+ 可以使用 from future import print_function 來實現相同功能在Python 3中,沒有舊式類,只有新式類,也就是說不用再像這樣 class Foobar(object): pass 顯式地子類化object原來1/2(兩個整數相除)結果是0,現在是0.5了

    #python 2 >>> 1/2 0

    #python3 >>> 1/2 0.5

    異常的寫法改變:原來的except Exception, e 變成 except (Exception) as e

    編碼

    Python2 的預設編碼是 asscii,這也是導致 Python2 中經常遇到編碼問題的原因之一,至於是為什麼會使用 asscii 作為預設編碼,原因在於 Python這門語言誕生的時候還沒出現 Unicode。Python 3 預設採用了 UTF-8 作為預設編碼,因此你不再需要在檔案頂部寫 # coding=utf-8 了。

    # python2 >>> print sys.getdefaultencoding() ascii # python3 >>> print(sys.getdefaultencoding()) utf-8

    字串

    字串是最大的變化之一,這個變化使得編碼問題降到了最低可能。在 Python2 中,字串有兩個型別,一個是 unicode,一個是 str,前者表示文字字串,後者表示位元組序列,不過兩者並沒有明顯的界限,開發者也感覺很混亂,不明白編碼錯誤的原因,不過在 Python3 中兩者做了嚴格區分,分別用 str 表示字串,byte 表示位元組序列,任何需要寫入文字或者網路傳輸的資料都只接收位元組序列,這就從源頭上阻止了編碼錯誤的問題。

    >>> s = "中文" >>> s "中文" >>> type(s) <class "str"> # 上面的str型別物件實際上相當於py2的unicode s.encode("utf-8") b"\xe4\xb8\xad\xe6\x96\x87" # str物件encode utf-8後,變成bytes物件,所以bytes物件取代了py2的str物件

    所以:

    py2 -> unicode -> 被 py3的str物件代替py2 -> str -> 被py3的bytes物件代替

    py2 與 py3 字串差異比較

    迭代器

    在 Python2 中很多返回列表物件的內建函式和方法在 Python 3 都改成了返回類似於迭代器的物件,因為迭代器的惰性載入特性使得操作大資料更有效率。Python2 中的 range 和 xrange 函式合併成了 range,如果同時相容2和3,可以這樣:

    try: range = xrange except: pass

    另外,字典物件的 dict.keys()、dict.values() 方法都不再返回列表,而是以一個類似迭代器的 "view" 物件返回。高階函式 map、filter、zip 返回的也都不是列表物件了。Python2的迭代器必須實現 next 方法,而 Python3 改成了 next

    map方法返回了迭代器而不再是列表

    # py2 #直接返回列表 >>> map(lambda x: x*x, range(1, 3)) [1, 4] #py3 # 返回迭代器 >>> map(lambda x: x*x, range(1, 3)) <map object at 0x7f45371e5c18> #需要遍歷才能讀取,這樣對於大資料會更高效率 >>> map_data = map(lambda x: x*x, range(1, 3)) >>> for m in map_data: ... print(m) ... 1 4

    asyncio 非同步IO模型

    asyncio是Python 3.4版本引入的標準庫,直接內建了對非同步IO的支援。

    asyncio的程式設計模型就是一個訊息迴圈。我們從asyncio模組中直接獲取一個EventLoop的引用,然後把需要執行的協程扔到EventLoop中執行,就實現了非同步IO。

  • 中秋節和大豐收的關聯?
  • 石太歲作為一種據說唯一有生命的收藏品前景如何?