python2和python3的區別(轉)

基本語法差別html

核心類差別

  1. Python3對Unicode字符的原生支持

Python2中使用 ASCII 碼做爲默認編碼方式致使string有兩種類型str和unicode,Python3只支持unicode的string。python2和python3字節和字符對應關係爲:python

 
img
  1. Python3採用的是絕對路徑的方式進行import。

Python2中相對路徑的import會致使標準庫導入變得困難(想象一下,同一目錄下有file.py,如何同時導入這個文件和標準庫file)。Python3中這一點將被修改,若是還須要導入同一目錄的文件必須使用絕對路徑,不然只能使用相關導入的方式來進行導入。mysql

  1. Python2中存在老式類和新式類的區別,Python3統一採用新式類。新式類聲明要求繼承object,必須用新式類應用多重繼承。web

  2. Python3使用更加嚴格的縮進。Python2的縮進機制中,1個tab和8個space是等價的,因此在縮進中能夠同時容許tab和space在代碼中共存。這種等價機制會致使部分IDE使用存在問題。Python3中1個tab只能找另一個tab替代,所以tab和space共存會致使報錯:TabError: inconsistent use of tabs and spaces in indentation.redis

廢棄類差別

  1. print語句被python3廢棄,統一使用print函數sql

  2. exec語句被python3廢棄,統一使用exec函數mongodb

  3. execfile語句被Python3廢棄,推薦使用exec(open("./filename").read())數據庫

  4. 不相等操做符"<>"被Python3廢棄,統一使用"!="windows

  5. long整數類型被Python3廢棄,統一使用intcentos

  6. xrange函數被Python3廢棄,統一使用range,Python3中range的機制也進行修改並提升了大數據集生成效率

  7. Python3中這些方法再再也不返回list對象:dictionary關聯的keys()、values()、items(),zip(),map(),filter(),可是能夠經過list強行轉換:

mydict={"a":1,"b":2,"c":3} mydict.keys() #<built-in method keys of dict object at 0x000000000040B4C8> list(mydict.keys()) #['a', 'c', 'b'] 
  1. 迭代器iterator的next()函數被Python3廢棄,統一使用next(iterator)

  2. raw_input函數被Python3廢棄,統一使用input函數

  3. 字典變量的has_key函數被Python廢棄,統一使用in關鍵詞

  4. file函數被Python3廢棄,統一使用open來處理文件,能夠經過io.IOBase檢查文件類型

  5. apply函數被Python3廢棄

  6. 異常StandardError 被Python3廢棄,統一使用Exception

修改類差別

  1. 浮點數除法操做符/和//區別
  • Python2:/是整數除法,//是小數除法
  • Python3:/是小數除法,//是整數除法。
  1. 異常拋出和捕捉機制區別
  • Python2

    raise IOError, "file error" #拋出異常 except NameError, err: #捕捉異常 
  • Python3

    raise IOError("file error") #拋出異常 except NameError as err: #捕捉異常 
  1. for循環中變量值區別
  • Python2,for循環會修改外部相同名稱變量的值

    i = 1 print ('comprehension: ', [i for i in range(5)]) print ('after: i =', i ) #i=4 
  • Python3,for循環不會修改外部相同名稱變量的值

    i = 1 print ('comprehension: ', [i for i in range(5)]) print ('after: i =', i ) #i=1 
  1. round函數返回值區別
  • Python2,round函數返回float類型值

    isinstance(round(15.5),int) #True 
  • Python3,round函數返回int類型值

    isinstance(round(15.5),float) #True 
  1. 比較操做符區別
  • Python2中任意兩個對象均可以比較

    11 < 'test' #True 
  • Python3中只有同一數據類型的對象能夠比較

    11 < 'test' # TypeError: unorderable types: int() < str() 

新增類差別

全部在Python3.X中增長的新特性在Python2中都不支持,這些新特性的說明在官網中有詳細的說明:

國內有對這些特性中的重要點進行介紹的博文,能夠做爲參考:http://www.cnblogs.com/animalize/p/5633215.html

第三方工具包

咱們在pip官方下載源pypi搜索Python2.7和Python3.5的第三方工具包數能夠發現,Python2.7版本對應的第三方工具類目數量是28523,Python3.5版本的數量是12457,這兩個版本在第三方工具包支持數量差距至關大。

https://pypi.python.org/pypi?:action=browse&c=532

 

 

https://pypi.python.org/pypi?:action=browse&c=607

 

 

咱們從數據分析的應用角度列舉了常見實用的第三方工具包(以下表),並分析這些工具包在Python2.7和Python3.5的支持狀況:

分類 工具名 用途
數據收集 scrapy 網頁採集,爬蟲
數據收集 scrapy-redis 分佈式爬蟲
數據收集 selenium web測試,仿真瀏覽器
數據處理 beautifulsoup 網頁解釋庫,提供lxml的支持
數據處理 lxml xml解釋庫
數據處理 xlrd excel文件讀取
數據處理 xlwt excel文件寫入
數據處理 xlutils excel文件簡單格式修改
數據處理 pywin32 excel文件的讀取寫入及複雜格式定製
數據處理 Python-docx Word文件的讀取寫入
數據分析 numpy 基於矩陣的數學計算庫
數據分析 pandas 基於表格的統計分析庫
數據分析 scipy 科學計算庫,支持高階抽象和複雜模型
數據分析 statsmodels 統計建模和計量經濟學工具包
數據分析 scikit-learn 機器學習工具庫
數據分析 gensim 天然語言處理工具庫
數據分析 jieba 中文分詞工具庫
數據存儲 MySQL-python mysql的讀寫接口庫
數據存儲 mysqlclient mysql的讀寫接口庫
數據存儲 SQLAlchemy 數據庫的ORM封裝
數據存儲 pymssql sql server讀寫接口庫
數據存儲 redis redis的讀寫接口
數據存儲 PyMongo mongodb的讀寫接口
數據呈現 matplotlib 流行的數據可視化庫
數據呈現 seaborn 美觀的數據但是湖庫,基於matplotlib
工具輔助 jupyter 基於web的python IDE,經常使用於數據分析
工具輔助 chardet 字符檢查工具
工具輔助 ConfigParser 配置文件讀寫支持
工具輔助 requests HTTP庫,用於網絡訪問

工具安裝問題

  • windows環境

Python2 沒法安裝mysqlclient。Python3 沒法安裝MySQL-python、 flup、functools3二、Gooey、Pywin3二、 webencodings。

matplotlib在python3環境中安裝報錯:The following required packages can not be built:freetype, png。須要手動下載安裝源碼包安裝解決。

scrapy在python3環境中安裝報錯,需安裝VC++2015安裝包: http://landinghub.visualstudio.com/visual-cpp-build-tools

scipy在Python3環境中安裝報錯,numpy.distutils.system_info.NotFoundError,須要本身手工下載對應的安裝包,依賴numpy,pandas必須嚴格根據python版本、操做系統、64位與否。

運行matplotlib後發現基礎包numpy+mkl安裝失敗,須要本身下載,國內暫無下載源

  • centos環境下

python2沒法安裝mysql-python和mysqlclient包,報錯:EnvironmentError: mysql_config not found,解決方案是安裝mysql-devel包解決。使用matplotlib報錯:no module named _tkinter,安裝Tkinter、tk-devel、tc-devel解決。

pywin32也沒法在centos環境下安裝。

工具測試結果

解決上述的安裝問題後,編寫了測試腳本(附錄)運行上述工具包的簡單案例,測試結果均經過,代表上述第三方工具包安裝成功後在Windows和Centos環境下都可以成功運行

相關文章
相關標籤/搜索