Python2與Python3的區別

Python2與Python3的區別

1) 核心類差異

  1. Python3 對 Unicode 字符的原生支持。
    Python2 中使用 ASCII 碼作為默認編碼方式導致 string 有兩種類型 str 和 unicode,Python3 只
    支持 unicode 的 string。Python2 和 Python3 字節和字符對應關系為:

    python2python3表現轉換作用
    strbytes字節encode存儲
    unicodestr字符decode顯示
  2. Python3 采用的是絕對路徑的方式進行 import
  3. Python2中存在老式類和新式類的區別,Python3統一采用新式類。新式類聲明要求繼承object,
    必須用新式類應用多重繼承
  4. Python3 使用更加嚴格的縮進。Python2 的縮進機制中,1 個 tab 和 8 個 space 是等價的,所
    以在縮進中可以同時允許 tab 和 space 在代碼中共存。這種等價機制會導致部分 IDE 使用存在問題。
    Python3 中 1 個 tab 只能找另外一個 tab 替代,因此 tab 和 space 共存會導致報錯:TabError:
    inconsistent use of tabs and spaces in indentation.

2) 廢棄類差異

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

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

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

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

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

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

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

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

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

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

  11. file 函數被 Python3 廢棄,統一使用 open 來處理文件,可以通過 io.IOBase 檢查文件類型

  12. apply 函數被 Python3 廢棄

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

3)修改類差異

  1. 浮點數除法操作符“/”和“//”的區別
    “ / ”:
    Python2:若為兩個整形數進行運算,結果為整形,但若兩個數中有一個為浮點數,則結果為
    浮點數;
    Python3:為真除法,運算結果不再根據參加運算的數的類型。
    “//”:
    Python2:返回小于除法運算結果的最大整數;從類型上講,與"/"運算符返回類型邏輯一致。
    Python3:和 Python2 運算結果一樣。
  2. 異常拋出和捕捉機制區別

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
  2. round 函數返回值區別

    Python2,round 函數返回 float 類型值

    isinstance(round(15.5),int)  #True

    Python3,round 函數返回 int 類型值

    isinstance(round(15.5),float) #True
  3. 比較操作符區別

    Python2 中任意兩個對象都可以比較

    11 < 'test'  # True

    Python3 中只有同一數據類型的對象可以比較

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

4)第三方工具包差異

我們在pip官方下載源pypi搜索Python2.7和Python3.5的第三方工具包數可以發現,Python2.7
版本對應的第三方工具類目數量是 28523,Python3.5 版本的數量是 12457,這兩個版本在第三方工具
包支持數量差距相當大。
我們從數據分析的應用角度列舉了常見實用的第三方工具包(如下表),并分析這些工具包在
Python2.7 和 Python3.5 的支持情況:

分類工具名用途
數據收集scrapy網頁采集,爬蟲
數據收集scrapy-redis分布式爬蟲
數據收集seleniumweb 測試,仿真瀏覽器
數據處理beautifulsoup網頁解釋庫,提供 lxml 的支持
數據處理lxmlxml 解釋庫
數據處理xlrdexcel 文件讀取
數據處理xlwtexcel 文件寫入
數據處理xlutilsexcel 文件簡單格式修改
數據處理pywin32excel 文件的讀取寫入及復雜格式定制
數據處理Python-docxWord 文件的讀取寫入
數據分析numpy基于矩陣的數學計算庫
數據分析pandas基于表格的統計分析庫
數據分析scipy科學計算庫,支持高階抽象和復雜模型
數據分析statsmodels統計建模和計量經濟學工具包
數據分析scikit-learn機器學習工具庫
數據分析gensim自然語言處理工具庫
數據分析jieba中文分詞工具庫
數據存儲MySQL-pythonmysql 的讀寫接口庫
數據存儲mysqlclientmysql 的讀寫接口庫
數據存儲SQLAlchemy數據庫的 ORM 封裝
數據存儲pymsqlsql server 讀寫接口庫
數據存儲redisredis 的讀寫接口
數據存儲PyMongomongodb 的讀寫接口
數據呈現matplotlib流行的數據可視化庫
數據呈現seaborn美觀的數據可是湖庫,基于 matplotlib
工具輔助chardet字符檢查工具
工具輔助ConfigParser配置文件讀寫支持
工具輔助requestsHTTP 庫,用于網絡訪問

5)工具安裝問題

windows 環境
Python2 無法安裝 mysqlclient。Python3 無法安裝 MySQL-python、 flup、functools32、Gooey、Pywin32 、webencodings。
matplotlib 在 python3 環境中安裝報錯:The following required packages can not be built:freetype, png。需要手動下載安裝源碼包安裝解決。
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 環境下安裝

轉載于:https://www.cnblogs.com/pankypan/p/11072229.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript-內存空間

深入了解js這門語言后&#xff0c;才發現它有著諸多眾所周知的難點&#xff08;例如&#xff1a;閉包、原型鏈、內存空間等&#xff09;。有的是因為js的設計缺陷導致的&#xff0c;而有的則是js的優點。不管如何&#xff0c;總需要去學會它們&#xff0c;在學習過程中我覺得只…

java類的結構1: 屬性 —(11)

類的設計中&#xff0c;兩個重要結構之一&#xff1a;屬性 對比&#xff1a;屬性 vs 局部變量 1.相同點&#xff1a; 1.1 定義變量的格式&#xff1a;數據類型 變量名 變量值1.2 先聲明&#xff0c;后使用1.3 變量都其對應的作用域 2.不同點&#xff1a; 2.1 在類中聲明的…

GXU - 7D - 區間求和 - 前綴和

https://oj.gxu.edu.cn/contest/7/problem/D 描述 有一個所有元素皆為0的數組A&#xff0c;有兩種操作&#xff1a; 1 l r x表示將A區間[l,r]內所有數加上x&#xff1b; 2 l r表示將A區間[l,r]內從左往右數第i個數加上i&#xff1b; 給出m個操作&#xff0c;請輸出操作結束后A中…

javascript-排序算法

插入排序 算法描述&#xff1a; 1. 從第一個元素開始&#xff0c;該元素可以認為已經被排序 2. 取出下一個元素&#xff0c;在已經排序的元素序列中從后向前掃描 3. 如果該元素&#xff08;已排序&#xff09;大于新元素&#xff0c;將該元素移到下一位置 4. 重復步驟 3&am…

DPDK并行計算

參考文獻&#xff1a; 《深入淺出DPDK》 https://www.cnblogs.com/LubinLew/p/cpu_affinity.html ...................................................................... 前言&#xff1a; 處理器提高性能主要是通過兩個途徑&#xff0c;一個是提高IPC&#xff08;CPU每一時…

Highcharts圖表-ajax-獲取json數據生成圖表

重點說明此代碼是針對一個報表顯示多個項對比顯示。 直接貼代碼&#xff1a;web端 <script type"text/JavaScript" src"js/jQuery/jquery-1.7.2.js"></script> <script type"text/javascript" src"j…

關于RGBDSLAMV2學習、安裝、調試過程

Step&#xff11;&#xff1a;https://github.com/felixendres/rgbdslam_v2/wiki/Instructions-for-Compiling-Rgbdslam-(V2)-on-a-Fresh-Ubuntu-16.04-Install-(Ros-Kinetic)-in-Virtualbox 照著這個instructions安裝好 rgbdslamv2&#xff0c;并且在安裝的過程中&#xff0c;…

Java—List的用法與實例詳解

List特點和常用方法 List是有序、可重復的容器。 有序指的是&#xff1a;List中每個元素都有索引標記。可以根據元素的索引標記&#xff08;在List中的位置&#xff09;訪問元素&#xff0c;從而精確控制這些元素。 可重復指的是&#xff1a;List允許加入重復的元素。更確切地講…

Java—遍歷集合的N種方式總結Collections工具類

遍歷集合的N種方式總結 【示例1】遍歷List方法1&#xff0c;使用普通for循環 for(int i0;i<list.size();i){ //list為集合的對象名 String temp (String)list.get(i); System.out.println(temp); } 【示例2】遍歷List方法2&#xff0c;使用增強for循環(使用泛型定義…

java類的結構2: 方法—(12)

面向對象的特征一&#xff1a;封裝與隱藏 1.為什么要引入封裝性&#xff1f; 我們程序設計追求“高內聚&#xff0c;低耦合”。 高內聚 &#xff1a;類的內部數據操作細節自己完成&#xff0c;不允許外部干涉&#xff1b; 低耦合 &#xff1a;僅對外暴露少量的方法用于使用。…

Docker 環境下部署 redash

環境&#xff1a; centos7 官網&#xff1a;https://redash.io/help/open-source/dev-guide/docker 一、安裝步驟 1、虛擬機安裝 安裝vmware&#xff0c;并安裝centos7 2、安裝docker docker安裝手冊 3、安裝nodejs centos下安裝Nodejs 4、redash安裝 1)、clone git repostory …

List接口常用實現類的特點和底層實現

List接口常用的實現類有3個&#xff1a;ArrayList、LinkedList、Vector。 那么它們的特點和底層實現有哪些呢&#xff1f; ArrayList特點和底層實現 ArrayList底層是用數組實現的存儲。 特點&#xff1a;查詢效率高&#xff0c;增刪效率低&#xff0c;線程不安全。我們一般使用…

java面向對象的特征 —(13)

面向對象的特征一&#xff1a;封裝與隱藏 1.為什么要引入封裝性&#xff1f; 我們程序設計追求“高內聚&#xff0c;低耦合”。 高內聚 &#xff1a;類的內部數據操作細節自己完成&#xff0c;不允許外部干涉&#xff1b; 低耦合 &#xff1a;僅對外暴露少量的方法用于使用。…

null指針

做了一個關于花卉花木的管理操作&#xff0c;后期因為花卉的類型需要顯示在花卉詳情頁面&#xff0c;所以需要兩張表連接。在不寫sql語句的前提下&#xff0c;用了外鍵連接。因為在先前的操作過程中&#xff0c;沒有將外鍵所在字段設置為必填項&#xff0c;導致有一個外鍵字段為…

jquery Ajax請求本地json

1-1-1 json文件內容(item.json) [{"name":"張國立","sex":"男","email":"zhangguoli123.com","url":"./img/1.jpg"},{"name":"張鐵林","sex":"男"…

論文《learning to link with wikipedia》

learning to link with wikipedia 一、本文目標&#xff1a; 如何自動識別非結構化文本中提到的主題&#xff0c;并將其鏈接到適當的Wikipedia文章中進行解釋。 二、主要借鑒論文&#xff1a; Mihalcea and Csomai----Wikify!: linking documents to encyclopedic knowledge 第…

java類的結構:構造器 —(13)

1.構造器&#xff08;或構造方法&#xff09;&#xff1a;Constructor 構造器的作用&#xff1a; 1.創建對象2.初始化對象的信息 2.使用說明&#xff1a; 1.如果沒顯式的定義類的構造器的話&#xff0c;則系統默認提供一個空參的構造器2.定義構造器的格式&#xff1a;權限修…

java面向對象的特征二:繼承性 —(14)

1.為什么要有類的繼承性&#xff1f;(繼承性的好處&#xff09; ① 減少了代碼的冗余&#xff0c;提高了代碼的復用性② 便于功能的擴展③ 為之后多態性的使用&#xff0c;提供了前提 圖示&#xff1a; 2.繼承性的格式&#xff1a; class A extends B{} A:子類、派生類、s…

vuejs怎么在服務器上發布部署

首先VUE 是一個javascript的前端框架&#xff0c;注定了它是運行在瀏覽器里的&#xff0c;對服務器本地沒有任何要求&#xff0c;只要一個靜態文件服務器能通過http訪問到其資源文件就足矣&#xff01;無論你是用apache ,ngnix 就算你要用node 自己實現一個靜態文件服務器&…

C#入門詳解(14)

接口&#xff0c;依賴反轉&#xff0c;單元測試 接口是協約是規定&#xff0c;所以必須是公開的&#xff0c;只能是public; static void Main(string[] args){int[] num1 new int[] { 1, 2, 3, 4, 5 };Console.WriteLine(Sum(num1).ToString());Console.WriteLine(""…