⑴ python2和python3的區別
簡單的說,2是舊3是新,3是2的升級版,3完全高於2,2是時代的眼淚3是現在和未來,2逐漸被淘汰3用的人越來越多。
之前兩個版本共存只是因為諸多package的更新換代並沒有跟上,但是到了現在只要還有活人維護的package基本都兼容3了,然而新建的package卻越來越多不兼容2。使用2的意義基本沒有了,日常用3大不了留一個2備用就行。
⑵ python2和python3有什麼區別
區別就是,請用python3
⑶ Python3和Python2的區別
具體區別如下
1:列印時,py2需要可以不需要加括弧,py3 需要python 2 :print ('lili') , print 'lili'python 3 : print ('lili') python3 必須加括弧exec語句被python3廢棄,統一使用exec函數
2:內涵
Python2:1,臃腫,源碼的重復量很多。 2,語法不清晰,摻雜著C,php,Java的一些陋習。
Python3:幾乎是重構後的源碼,規范,清晰,優美。
3: 輸出中文的區別python2:要輸出中文 需加 # -*- encoding:utf-8 -*-Python3 :直接輸出
4:input不同python2 :raw_input python3 :input 統一使用input函數
5:指定位元組python2在編譯安裝時,可以通過參數-----enable-unicode=ucs2 或-----enable-unicode=ucs4分別用於指定使用2個位元組、4個位元組表示一個unicode;python3無法進行選擇,默認使用 ucs4查看當前python中表示unicode字元串時佔用的空間:impor sysprint(sys.maxunicode)#如果值是65535,則表示使用usc2標准,即:2個位元組表示#如果值是1114111,則表示使用usc4標准,即:4個位元組表示
6:py2:xrangerangepy3:range 統一使用range,Python3中range的機制也進行修改並提高了大數據集生成效率
7:在包的知識點里包:一群模塊文件的集合 + __init__區別:py2 : 必須有__init__py3:不是必須的了
8:不相等操作符"<>"被Python3廢棄,統一使用"!="
9:long整數類型被Python3廢棄,統一使用int
10:迭代器iterator的next()函數被Python3廢棄,統一使用next(iterator)
11:異常StandardError 被Python3廢棄,統一使用Exception
12:字典變數的has_key函數被Python廢棄,統一使用in關鍵詞
13:file函數被Python3廢棄,統一使用open來處理文件,可以通過io.IOBase檢查文件類型
⑷ 詳解python2 和 python3的區別
Python2.x與3.x版本區別
Python的3.0版本,常被稱為Python 3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。
為了不帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下相容。
許多針對早期Python版本設計的程式都無法在Python 3.0上正常執行。
為了照顧現有程式,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函數。
新的Python程式建議使用Python 3.0版本的語法。
除非執行環境無法安裝Python 3.0或者程式本身使用了不支援Python 3.0的第三方庫。目前不支援Python 3.0的第三方庫有Twisted, py2exe, PIL等。
大多數第三方庫都正在努力地相容Python 3.0版本。即使無法立即使用Python 3.0,也建議編寫相容Python 3.0版本的程式,然後使用Python 2.6, Python 2.7來執行。
Python 3.0的變化主要在以下幾個方面:
1. print 函數
print語句沒有了,取而代之的是print()函數。 Python 2.6與Python 2.7部分地支持這種形式的print語法。在Python 2.6與Python 2.7裡面,以下三種形式是等價的:
print"fish"
print("fish")#注意print後面有個空格
print("fish")#print()不能帶有任何其它參數
然而,Python 2.6實際已經支持新的print()語法:
from__future__importprint_function
print("fish","panda",sep=',')
2.Unicode
Python 2 有 ASCII str() 類型,unicode() 是單獨的,不是 byte 類型。
現在, 在 Python 3,我們最終有了 Unicode (utf-8) 字元串,以及一個位元組類:byte 和 bytearrays。
由於 Python3.X 源碼文件默認使用utf-8編碼,這就使得以下代碼是合法的:
>>>中國='china'
>>>print(中國)
china
Python 2.x
>>>str="我愛北京天安門"
>>>str
''
>>>str=u"我愛北京天安門"
>>>str
u''
Python 3.x
>>>str="我愛北京天安門"
>>>str
'我愛北京天安門'
3. 除法運算
Python中的除法較其它語言顯得非常高端,有套很復雜的規則。Python中的除法有兩個運算符,/和//
3.1首先來說/除法:
在python 2.x中/除法就跟我們熟悉的大多數語言,比如Java啊C啊差不多,整數相除的結果是一個整數,把小數部分完全忽略掉,浮點數除法會保留小數點的部分得到一個浮點數的結果。
在python 3.x中/除法不再這么做了,對於整數之間的相除,結果也會是浮點數。
Python 2.x:
>>>1/2
0
>>>1.0/2.0
0.5
Python 3.x :
>>>1/2
0.5
而對於//除法,這種除法叫做floor除法,會對除法的結果自動進行一個floor操作,在python 2.x和python 3.x中是一致的。
python 2.x :
>>>-1//2
-1
python 3.x :
>>>-1//2
-1
注意的是並不是舍棄小數部分,而是執行floor操作,如果要截取小數部分,那麼需要使用math模塊的trunc函數
python 3.x :
>>>importmath
>>>math.trunc(1/2)
0
>>>math.trunc(-1/2)
0
4. 異常
在 Python 3 中處理異常也輕微的改變了,在 Python 3 中我們現在使用 as 作為關鍵詞。
捕獲異常的語法由except exc, var改為except exc as var。
使用語法except (exc1, exc2) as var可以同時捕獲多種類別的異常。 Python 2.6已經支持這兩種語法。
1. 在2.x時代,所有類型的對象都是可以被直接拋出的,在3.x時代,只有繼承自BaseException的對象才可以被拋出。
2. 2.x raise語句使用逗號將拋出對象類型和參數分開,3.x取消了這種奇葩的寫法,直接調用構造函數拋出對象即可。
在2.x時代,異常在代碼中除了表示程序錯誤,還經常做一些普通控制結構應該做的事情,在3.x中可以看出,設計者讓異常變的更加專一,只有在錯誤發生的情況才能去用異常捕獲語句來處理。
5. xrange
在 Python 2 中 xrange() 創建迭代對象的用法是非常流行的。比如: for 循環或者是列表/集合/字典推導式。
這個表現十分像生成器(比如。"惰性求值")。但是這個 xrange-iterable 是無窮的,意味著你可以無限遍歷。
由於它的惰性求值,如果你不得僅僅不遍歷它一次,xrange() 函數 比 range() 更快(比如 for 循環)。盡管如此,對比迭代一次,不建議你重復迭代多次,因為生成器每次都從頭開始。
在 Python 3 中,range() 是像 xrange() 那樣實現以至於一個專門的 xrange() 函數都不再存在(在 Python 3 中 xrange() 會拋出命名異常)。
Python 3
importtimeit
n=10000
deftest_range(n):
returnforiinrange(n):
pass
deftest_xrange(n):
foriinxrange(n):
pass
Python 2
print'Python',python_version()
print' timingrange()'
%timeittest_range(n)
print' timingxrange()'
%timeittest_xrange(n)
Python2.7.6
timingrange()
1000loops,bestof3:433µsperloop
timingxrange()1000loops,bestof3:350µsperloop
Python2.7.6
timingrange()
1000loops,bestof3:433µsperloop
timingxrange()
1000loops,bestof3:350µsperloop
Python 3
print('Python',python_version())
print(' timingrange()')
%timeittest_range(n)
Python3.4.1
timingrange()
1000loops,bestof3:520µsperloop
print(xrange(10))
---------------------------------------------------------------------------
NameErrorTraceback(mostrecentcalllast)
<ipython-input-5-5d8f9b79ea70>in<mole>()
---->1print(xrange(10))
NameError:name'xrange'isnotdefined
6. 八進制字面量表示
八進制數必須寫成0o777,原來的形式0777不能用了;二進制必須寫成0b111。
新增了一個bin()函數用於將一個整數轉換成二進制字串。 Python 2.6已經支持這兩種語法。
在Python 3.x中,表示八進制字面量的方式只有一種,就是0o1000。
python 2.x
>>>0o1000
512
>>>01000
512
python 3.x
>>>01000
File"<stdin>",line1
01000
^
SyntaxError:invalidtoken
>>>0o1000
512
7.不等運算符
Python 2.x中不等於有兩種寫法 != 和 <>
Python 3.x中去掉了<>, 只有!=一種寫法,還好,我從來沒有使用<>的習慣
8. 去掉了repr表達式``
Python 2.x 中反引號``相當於repr函數的作用
Python 3.x 中去掉了``這種寫法,只允許使用repr函數,這樣做的目的是為了使代碼看上去更清晰么?不過我感覺用repr的機會很少,一般只在debug的時候才用,多數時候還是用str函數來用字元串描述對象。
defsendMail(from_:str,to:str,title:str,body:str)->bool:
pass
多個模塊被改名(根據PEP8)
>>>s=b.decode()
>>>s
'china'
>>>b1=s.encode()
>>>b1
b'china'
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函數都被廢棄。同時去掉的還有 dict.has_key(),用 in替代它吧 。
⑸ 測試自動化常用的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有哪些區別
1.性能
Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的優化空間,在字元串和整形操作上可
以取得很好的優化結果。
Py3.1性能比Py2.5慢15%,還有很大的提升空間。
2.編碼
Py3.X源碼文件默認使用utf-8編碼,這就使得以下代碼是合法的:
>>> 中國 = 'china'
>>>print(中國)
china
3. 語法
1)去除了<>,全部改用!=
2)去除``,全部改用repr()
3)關鍵詞加入as 和with,還有True,False,None
4)整型除法返回浮點數,要得到整型結果,請使用//
5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全局)變數
6)去除print語句,加入print()函數實現相同的功能。同樣的還有 exec語句,已經改為exec()函數
例如:
2.X: print "The answer is", 2*2
3.X: print("The answer is", 2*2)
2.X: print x, # 使用逗號結尾禁止換行
3.X: print(x, end=" ") # 使用空格代替換行
2.X: print # 輸出新行
3.X: print() # 輸出新行
2.X: print >>sys.stderr, "fatal error"
3.X: print("fatal error", file=sys.stderr)
2.X: print (x, y) # 輸出repr((x, y))
3.X: print((x, y)) # 不同於print(x, y)!
7)改變了順序操作符的行為,例如x<y,當x和y類型不匹配時拋出TypeError而不是返回隨即的 bool值
8)輸入函數改變了,刪除了raw_input,用input代替:
2.X:guess = int(raw_input('Enter an integer : ')) # 讀取鍵盤輸入的方法
3.X:guess = int(input('Enter an integer : '))
9)去除元組參數解包。不能def(a, (b, c)):pass這樣定義函數了
⑺ Python 2 和 Python 3 有哪些主要區別
1. print不再是語句,而是函數,比如原來是 print 'abc' 現在是 print('abc')但是 python2.6+ 可以使用 from __future__ import print_function 來實現相同功能> 2. 在Python 3中,沒有舊式類,只有新式類,也就是說不用再像這樣 class Foobar(object): pass 顯式地子類化object但是最好還是加上. 主要區別在於 old-style 是 classtype 類型而 new-style 是 type類型> 3. 原來1/2(兩個整數相除)結果是0,現在是0.5了python 2.2+ 以上都可以使用 from __future__ import division 實現改特性, 同時注意 // 取代了之前的 / 運算> 4. 新的字元串格式化方法format取代%錯誤, 從 python2.6+ 開始已經在str和unicode中有該方法, 同時 python3依然支持 % 算符> 6. xrange重命名為range同時更改的還有一系列內置函數及方法, 都返回迭代器對象, 而不是列表或者 元組, 比如 filter, map, dict.items 等> 7. !=取代 < > python2 也很少有人用 < > 所以不算什麼修改> 8. long重命名為int不完全對, python3 徹底廢棄了 long+int 雙整數實現的方法, 統一為 int , 支持高精度整數運算.> 9. except Exception, e變成except (Exception) as e只有 python2.5 及以下版本不支持該語法. python2.6 是支持的. 不算新東西> 10. exec變成函數類似 print() 的變化, 之前是語句.簡單補充下* 主要是類庫的變化, 組織結構變了些. 但功能沒變. urlparse - > urllib.parse 這樣的變化* 最核心的變化它沒有說, 對 bytes 和 原生 UNICODE 字元串的支持, 刪除了 unicode 對象, str 為原生 unicode 字元串, bytes 替代了之前的 str 這個是最核心的.
⑻ python2和3的區別大嗎
1、Python2之前是非常受歡迎的,現在很多軟體公司依然使用的是Python2,不過由於越來越多的公司開始從Python2遷移到3,因此初學者可以避免花費更多的時間學習過去的版本了。
2、Python2和Python3之間有一些是無法互相兼容的,現在很多開發人員都在使用Python3開發庫,許多老的基於Python2的開發包依然是無法兼容的,想要將Python2庫移植到Python3上,對於初學者來說還是比較困難的事情。
3、Python3有更好的Unicode編碼支持在Python3的語法之中,默認文化字元串就是Unicode,而Python2默認的存儲為ASCII,而且Unicode比ASCII更加通用,可以提供更多的選擇。
4、Python3版本改進了整數除法的問題,在Python2中如果你在小數點後面寫任何一個數字,計算會自動四捨五入的。而使用Python3的情況下是不需要擔心這種情況發生的。
5、兩個版本之間有不同的列印語句聲明語法,是語法差異,不影響Python的功能。
⑼ python3和python2的區別
這個星期開始學習Python了,因為看的書都是基於Python2.x,而且我安裝的是Python3.1,所以書上寫的地方好多都不適用於Python3.1,特意在Google上search了一下3.x和2.x的區別。特此在自己的空間中記錄一下,以備以後查找方便,也可以分享給想學習Python的friends.
1.性能
Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的優化空間,在字元串和整形操作上可
以取得很好的優化結果。
Py3.1性能比Py2.5慢15%,還有很大的提升空間。
2.編碼
Py3.X源碼文件默認使用utf-8編碼,這就使得以下代碼是合法的:
>>> 中國 = 'china'
>>>print(中國)
china