① 測試自動化常用的python語言,兩個版本python2和python3有何區別
Python 3 代表 Python 語言進化的一個產物,為了不帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下相容。所以我們在使用python進行自動化學習的時候,最好要清楚python3.0相比2.0的變化。
Python 3.0的變化主要在以下幾個方面:
變化1:print語句沒有了,取而代之的是print()函數。
變化2:Python 3 使用了文本(text)和(二進制)數據的概念,而非 Unicode 字元串和 8 位字元
串。所有的文本都是 Unicode 編碼的。 Python3.X 源碼文件默認使用utf-8編碼
變化3:Python 2.x中不等於有兩種寫法 != 和 >
Python 3.x中去掉了>, 只有!=一種寫法,還好,我從來沒有使用>的習慣
變化4:列表推導時,不再支持[n for n in a,b]語法,改為[n for n in (a,b)]或[n for n in [a,b]]
變化5:python2中,文件對象有一個xreadlines()方法,返回一個迭代器,一次讀取文件的一行。這在for循環中尤其實用。python3中,xreadlines()方法
不再可用。
主要就是上面5個,如果想對python3的變化還想更多了解,可以搜下傳智播客軟體測試學科的視頻了解下
② python2和python3的區別
簡單的說,2是舊3是新,3是2的升級版,3完全高於2,2是時代的眼淚3是現在和未來,2逐漸被淘汰3用的人越來越多。
之前兩個版本共存只是因為諸多package的更新換代並沒有跟上,但是到了現在只要還有活人維護的package基本都兼容3了,然而新建的package卻越來越多不兼容2。使用2的意義基本沒有了,日常用3大不了留一個2備用就行。
③ python2和python有什麼區別
很多初學者剛開始學python的時候,一定都遇到過這個問題,python的世界有2個版本,python2 和 python3 ,而且有些語法還不兼容.怎麼辦~~到底應該選擇哪個版本來開發呢?好,今天我們就來聊聊這個話題.
1.Python2和Python3的歷史背景
Python語言是在20世紀90年代誕生的,算算到現在已經是25歲的大叔級的語言了(跟它同一個時代的還有一個鼎鼎大名的java是在1995發行的, 紅了幾十年).
但是Python真正成名比java晚了很多年,其實也主要是應用領域的時代變遷.(猜測為啥,對了大數據的出現)
Python2是Python裡面一個非常重要的版本,最早的版本是從2001的時候開始的,特別是從2006年開始py2.5的發布,python的功能逐漸強大起來,慢慢開始穩定下來,並且差不多1-2年左右遞增一個版本,在08年左右開始慢慢的火起來了.
而Python3最早是從2008開始發布,但是py3.0的版本非常不穩定,所以社區更新的很快,差不多幾個月就更新一次。所以一開始的時候並沒有很多人用,只到2014春暖花開的時候python3.4 deliver了才開始慢慢穩定下來.
下面我們看一個數據,這是Python社區聯和一些網站在2014做的一個調查,關於Python2/3,部分的結果如下:
1).97.51%用戶還在寫Python2的代碼
2).60%的用戶寫Python3的代碼
3).78.09%的用戶更多地寫Python2代碼
4).77.09%的用戶認可Python3
目前有一些Linux里的操作系統已經默認使用Python3:
1).Arch Linux (輕量級的Linux操作系統)
2).Ubuntu 16.04 (一個桌面應用為主的Linux操作系統)
3).Fedora(Redhat桌面版本的延續)
2.Python2和Python3的主要區別:
目前最新的數據是,Python有兩個版本:一個是2.7.12版,一個是3.5.12版.
那麼Python2運行的好好的,為啥突然要出個Python3呢,其實是為了解決Python2裡面一些歷史問題
第一個是字元串的問題:
Python 2 中文本和二進制數據是一個爛攤子,Python中的str 是代表二進制數據還是文本數據是有二義性,文字既能代表文本數據又能代表二進制數據這很麻煩,此類錯誤發生的時候,我們很難意識到。
第二個是對Unicode的支持
由於python是在1991年2月開源發布,這意味著它早於在1991年10月發布的第一版 Unicode 標准。在接下來幾年中,晚於 Unicode 標准出現的語言都選擇在支持 Unicode 編碼的基礎上實現自己的 str 類型,這讓 Python 2 處於尷尬的境地。
目前是一個python2/3共存的時代,這兩個版本是不兼容的。
python2現在只是做bug的修復,新硬體和操作系統兼容的相關維護工作。不會再有新的功能加入,python2隻支持到2020年.
現在Python正在朝著3版本進化,在進化過程中,大量的針對2.x版本的代碼要修改後才能運行,所以目前有許多第三方庫還暫時無法在3.x上使用。
不過可以暢想一下,也許再過幾年情況就會好很多,畢竟全世界有很多優秀的程序員正在把一些庫從Py2往Py3上遷移.
3.選擇還是要根據自己的需求
若是企業的開發,要滿足工作的需求,尤其是依賴的軟體只能運行在Python2下,首選Python2.比如你的開發需要依賴大量的第三方的庫(因為學Python非常大的一個原因就是因為它有成千上萬的第三方包),像大量的數據分析,科學計算,還是選Python2吧.
如果你是自己學習,研究的話,願意擁抱變化,那麼建議學Python3,因為它是未來的方向.
結論:
編程其實主要是對編程思想的理解和經驗的積累,千萬不要因為糾結學Py2還是Py3而浪費大量時間。
Py2和Py3裡面的思想基本是相通的,招式是類似的.當你熟悉Python到一定的程序的時候,會Py2的人學Py3隻需要很短的時間。
所以不要再糾結細枝末節的語法差異,而耽誤了寶貴的學習時間。
好了Python2和Python3的恩怨情仇就講到這里啦(它們還要相愛相殺一段時間),希望能給初學者一些啟發,若有什麼不懂的,也可以留言跟我探討交流.
最後說一下,原創不易,希望大家能夠給點支持,歡迎轉發,留言,也是對我的一點鼓勵和動力.
④ 為什麼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沒有保持向下兼容有點另類。
⑥ 電腦里有兩個Python
可以,
如果需要裝python2.7和python3.6兩個版本的話,分別安裝就可以,兩個版本的python安裝路徑不一樣,不影響。windows下python2.7需要設置一下path路徑。在命令行界面運行時,python2.7直接輸入python就可以,python3.6版本需要輸入python3。
如果需要裝python3的不同版本,比如python3.5和python3.6,需要安裝python的版本控制工具,比如現在比較流行的pyenv,Anaconda等等