本文目錄一覽:
- 1、對於初學者應該選擇python什麼版本呢?
- 2、python版本有什麼不同
- 3、為什麼python有兩個不同的版本,並且語法規
- 4、關於Python版本的問題?
- 5、anaconda與python什麼關係
- 6、python裡面不一樣的版本有什麼區別?
對於初學者應該選擇python什麼版本呢?
目前,根據數據顯示,使用Python2.xd 開發者站63.7%,而使用Python3.x的用戶站36.3%,由此可見使用使用Python2.x的用戶還是占多數。2014年,Python的創始人宣布將Python2.7支持時間延長到2020年,那麼初學者應該選擇什麼版本呢?目前建議初學者選擇Python3.x版本
1、目前,使用Python3.x是大勢所趨
2、Python3.x在Python2.x的基礎上做了功能升級
3、Python3.x和Python2.x思想基本是共通的
當然選擇Python3.x也會有缺點,那就是很多擴展庫的發行總是滯後於Python的發行版本,甚至目前還有很多庫不支持Python3.x。因此,在選擇Python時候,一定要先考慮清楚自己的學習目的,例如,打算做哪方面的開發、需要用到哪些擴展庫,以及擴展庫支持的最高Python版本等。明確這些問題後再做出適合自己的選擇。
python版本有什麼不同
對比python2和python3,兩者的差異如下:
1. Python3 對 Unicode 字符的原生支持。
Python2 中使用 ASCII 碼作為默認編碼方式導致 string 有兩種類型 str 和 unicode,Python3 只
支持 unicode 的 string。Python2 和 Python3 字節和字符對應關係為:
2. Python3 採用的是絕對路徑的方式進行 import
Python2 中相對路徑的 import 會導致標準庫導入變得困難(想象一下,同一目錄下有 file.py,如
何同時導入這個文件和標準庫 file)。Python3 中這一點將被修改,如果還需要導入同一目錄的文件必
須使用絕對路徑,否則只能使用相關導入的方式來進行導入。
推薦學習《python教程》
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.
廢棄類差異
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 強行轉換:
1. mydict={“a”:1,”b”:2,”c”:3}
2. mydict.keys() #built-in method keys of dict object at 0x000000000040B4C8
3. 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
修改類差異
1. 浮點數除法操作符“/”和“//”的區別
“ / ”:
Python2:若為兩個整形數進行運算,結果為整形,但若兩個數中有一個為浮點數,則結果為
浮點數;
Python3:為真除法,運算結果不再根據參加運算的數的類型。
“//”:
Python2:返回小於除法運算結果的最大整數;從類型上講,與”/”運算符返回類型邏輯一致。
Python3:和 Python2 運算結果一樣。
2. 異常拋出和捕捉機制區別
Python2
1. raise IOError, “file error” #拋出異常
2. except NameError, err: #捕捉異常
Python3
1. raise IOError(“file error”) #拋出異常
2. except NameError as err: #捕捉異常
3. for 循環中變量值區別
Python2,for 循環會修改外部相同名稱變量的值
1. i = 1
2. print (’comprehension: ‘, [i for i in range(5)])
3. print (’after: i =’, i ) #i=4
Python3,for 循環不會修改外部相同名稱變量的值
1. i = 1
2. print (’comprehension: ‘, [i for i in range(5)])
3. print (’after: i =’, i ) #i=1
為什麼python有兩個不同的版本,並且語法規
Python 2 和 Python 3,一直是一個話題。Brett Cannon 是 Python 的核心開發者,聽聽他關於 Python3 的看法。
本月我在 Puppy 上開展了一個問答活動(Puget Sound Python用戶組),讓我最終解釋了為什麼 Python 3 會出現以及整個的 string/bytes 處理機制。我因此受到讚揚這讓我很驚訝,因為原本我天真的認為大家都清楚為什麼 Python 3 會出現。回想起來我真是太傻,竟然認為大部分人(不管是剛接觸 Python 或者已經有一段時間)應該要麼已經被告知要麼有好奇心驅使去搜尋獲取一個解釋。所以這篇博文打算簡單的解釋一下為什麼 Python 3 會存在,特別是我們為什麼選擇打破整個向後兼容 unicode/str/bytes,因為這使得代碼移植到 Python 3 非常棘手。
在 Python 2 中文本和二進制數據是一個爛攤子
快,下面的文字代表什麼語義?
Python
1
‘abcd’
如果你是 Python 3 的用戶,你會說它是一個按照 “a”、”b”、”c”、”d”順序包含四個字母的字符串。
如果你是 Python 2 的用戶,你也會說同樣的話。你同樣也可能會說它是代表 97、98、99、100 的數組。事實上在 Python 2中對於 str 代表的含義有兩種正確的回答,這改變了語言的初衷。所以在 Python 3 中答案是唯一的。
《Python之禪》里講“應該有一個“應該有一個––最好只有一個顯而易見的方式去實現”。文字既能代表文本數據又能代表二進制數據這很麻煩。一旦對象 脫離你的控制,你將無從知曉。比如,如果你從網絡上讀到一些東西,你得小心判別這個 str 是代表二進制數據還是文本數據。或者你的代碼里有一個bug,它是用來將 str 變換成文本信息––或者完全別的東西––但你搞砸了,不小心跳過了這一步。由於 str 潛在的代表兩種類型,此類錯誤發生的時候,我們很難意識到。
也許你會說這些問題在 Python 2 中完全可以解決,只要你用 Unicode 而不是 str 去代表文本。雖然說的很對,但現實中人們不會那樣去做。人們要麼很懶,試着去避免解碼到 Unicode 帶來的額外工作,要麼對性能要求很高,不想因為解碼帶來額外的損失。無論哪種情況,它都假設你代碼足夠好而避免了那些麻煩,但我們都清楚人不是完美的都會犯錯。如果人們寄希望於在 Python 2 中寫出沒有 bug 的代碼能夠成真,我也不會總是聽到幾乎每個將他們的工程轉向 Python 3 的人講他們在代碼中間文本和二進制數據編解碼的潛在 bug。
避免 bug 是一件很重要的事情,但卻經常被人遺忘。簡化語言以及移除 str 可能代表的模糊含義會減少代碼的出錯率。《Python 之禪》指出“顯勝於隱”的一個原因是: 歧義和隱性知識使得代碼不容易溝通,進而容易出錯,導致 bug。通過迫使開發者明確地分離出他們的二進制數據和文本數據,會使代碼減少某一類的 bug。
其他語言都已經完全支持 Unicode(出於好的初衷)
人們有時會忘記 Python 有多久的歷史了:Guido 在1989年12月開始編寫 Python,在1991年2月開源發布。這意味着它早於在1991年10月發布的第一版 Unicode 標準。在接下來幾年中,晚於 Unicode 標準出現的語言都選擇在支持 Unicode 編碼的基礎上實現自己的 str 類型。這讓 Python 2 處於尷尬的境地。直到2004年開始引發關注(那時 Python 3 開始醞釀),但它爭辯說對於Unicode文本的弱支持是基於unicode 完全可選 ,人們不會在所有的文本信息上使用它。
支持 Unicode 和來自任何語言的的文本是非常重要的。Python 是一門面向世界的語言,而不只是那些支持 ASCII 碼覆蓋的羅馬數字的語言。這就是為什麼 Python 3 在處理文本時選擇“要麼使用 Unicode,要麼就乾脆不支持”的原因。官方宣稱所有的 Python 3 代碼都將支持世界上的每一個人,無論寫代碼的開發者是否有着明確的意圖。在 Python 2 中,按照能夠正確支持 Unicode 類型文本信息將項目分為兩類;在 Python 3 中則不存在此類問題,並且它支持所有語言。
我們設想 Python 將更越來越受歡迎
在2004年我們開始編寫 PEP 3000 進而開始設計 Python 3 (註:PEP 最初編號為 3000,但我們把它重新編號為 3100,這樣我們就可以藉助 編號 3000 的 PEP 來開發 Python 3)。我們清楚 Python 的受歡迎程度在不斷上升,我們也希望能夠延續這種勢頭(謝天謝地,目前如此)。但這也同時意味着如果我們想及時修正所有的設計缺陷來保證它的受歡迎度,最好趁現在而不是以後。我們設想 Python 3 相較於 Python 2 會持續更長一段時間,而 Python 2.7 僅僅是用來維護以前遺留的項目,而不會用於新項目中,那用 Python 3 寫出的代碼一定會多於用 Python 2 的。所以我們決定來承受由 Python 2 向 3 轉型之痛。並且在這種設想下開發了 Python 3。想要知道 Python 3 的代碼量能否趕超 Python 2,很顯然需要數十年時間。
我們再也不會做這種打破向後兼容性的事情
我們團隊已經下定決心再也不會讓諸如 unicode/str/bytes 這樣重大的改變隨意發生。當我們決心開始 Python 3 的時候,我們設想同時希望社區能夠像 Python 做的那般並且發布支持 Python 2的最終版本,接着切換到 Python 3 的功能開發中,只對 Python 2 做bug修復版本。這顯然沒有發生,同時也給我們上了一課。加上我們也沒有發現在語言的基礎設計中間存在需要做出如此重大改變來滿足需要的缺陷。也希望 Python 4 不要發生比從標準庫中移除廢棄模塊更激烈的改變。
結論
這就是 Python 3 為什麼是這個樣子的原因。我們意識到很多 bug 都是由於在 Python 2 中對 str 類型超負荷的使用。所以我們在 Python 3 中通過將文本數據和二進制數據分離來修正它。它也促使所有的文本信息都支持 Unicode,從而使得工程更容易在多種語言下工作。我們做出了改變,因為我們明白這種改變越早越好。我們在轉型期曾經認為社區最終會摒棄 Python 2 和我們一道,但結局並非如此,相反我們花費了更多時間並且用一個 Python 2/3 的兼容子集來實現這種過渡。
關於Python版本的問題?
目前大多數應用都是python
2.5/2.6的居多。
很多插件和庫都還停留在2.5/2.6階段,如果你去玩3.0,會發現很多擴展都沒有。可以說是如果你現在玩3.0“不實用”。
win上建議學2.6吧,linux上就玩2.5吧,py2.*和py3.*也並不是100%的不兼容,python3.0隻不過是對python2.*進行了一次大清洗,源碼上精鍊了許多,語法上做了些修繕。會2.5/6的話,以後不會對3.0感冒的。
anaconda與python什麼關係
安裝包大小不同,作用不同,性質不同。
1、安裝包大小不同,python自身缺少numpy、matplotlib、scipy、scikit-learn等一系列包,需要安裝pip來導入這些包才能進行相應運算。Anaconda(開源的Python包管理器)是一個python發行版,包含了conda、Python等180多個科學包及其依賴項。包含了大量的包,使用anaconda無需再去額外安裝所需包。
2、作用不同,Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言。anaconda可以用於在同一個機器上安裝不同版本的軟件包及其依賴,並能夠在不同的環境之間切換。
3、性質不同,Anaconda是一個打包的集合,裡面預裝好了conda、某個版本的python、眾多packages、科學計算工具等等,所以也稱為Python的一種發行版。
Python是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。
python裡面不一樣的版本有什麼區別?
Python版本分為Python2和Python3,它們之間的區別還是挺大的。
Python2和Python3分別是Python的兩個版本,Python3作為一個升級版,許多針對早期Python版本設計的程序都無法在Python3.0上正常執行。
1、Python2既可以使用帶小括號的方式,也可以使用一個空格來分隔打印內容,比如print
‘hi’;Python3使用print必須要以小括號包含打印內容,比如print(‘hi’);
2、Python2 range(1,10)返回列表,Python3中返回迭代器,節約內存;
3、Python2中使用ascii編碼,Python3中使用uft-8編碼;
4、Python2中Unicode表示字符串序列,str表示字節序列;Python3中str表示字符串序列,byte表示字節序列;
5、Python2中正常顯示中文,引入coding聲明,Python3中是不需要的;
6、Python2中是raw_input()函數,Python3中是input()函數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/240562.html