當前位置:首頁 » 編程語言 » python3和2

python3和2

發布時間: 2022-04-29 20:50:27

A. python2和python3的區別

簡單的說,2是舊3是新,3是2的升級版,3完全高於2,2是時代的眼淚3是現在和未來,2逐漸被淘汰3用的人越來越多。

之前兩個版本共存只是因為諸多package的更新換代並沒有跟上,但是到了現在只要還有活人維護的package基本都兼容3了,然而新建的package卻越來越多不兼容2。使用2的意義基本沒有了,日常用3大不了留一個2備用就行。

B. Python 2 和 Python 3 有哪些主要區別

整體區別結列舉如下:
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: printx, # 使用逗號結尾禁止換行
3.X: print(x, end="") # 使用空格代替換行
2.X:print # 輸出新行
3.X:print() # 輸出新行
2.X: print >>sys.stderr, "fatalerror"
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這樣定義函數了
10)新式的8進制字變數,相應地修改了oct()函數。
2.X的方式如下:
>>> 0666
438
>>> oct(438)
'0666'
3.X這樣:
>>> 0666
SyntaxError: invalid token (<pyshell#63>, line1)
>>> 0o666
438
>>> oct(438)
'0o666'
11)增加了 2進制字面量和bin()函數
>>> bin(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
12)擴展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求兩點:rest是list
對象和seq是可迭代的。
13)新的super(),可以不再給super()傳參數,
>>> class C(object):
def __init__(self,a):
print('C', a)
>>> class D(C):
def __init(self,a):
super().__init__(a) # 無參數調用super()
>>> D(8)
C 8
<__main__.D object at 0x00D7ED90>
14)新的metaclass語法:
class Foo(*bases, **kwds):
pass
15)支持class decorator。用法與函數decorator一樣:
>>> def foo(cls_a):
defprint_func(self):
print('Hello, world!')
cls_a.print =print_func
return cls_a
>>> @foo
class C(object):
pass
>>> C().print()
Hello, world!
class decorator可以用來玩玩狸貓換太子的大把戲。更多請參閱PEP 3129
4. 字元串和位元組串
1)現在字元串只有str一種類型,但它跟2.x版本的unicode幾乎一樣。
2)關於位元組串,請參閱「數據類型」的第2條目

C. python3和Python2的區別

你應該是剛接觸Python吧,建議直接學Python3.x

下面是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中的除法有兩個運算符,/和//

首先來說/除法:

在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() 會拋出命名異常)。

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

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

9.多個模塊被改名(根據PEP8)

>>>s=b.decode()
>>>s
'china'
>>>b1=s.encode()
>>>b1
b'china'

3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函數都被廢棄。同時去掉的還有 dict.has_key(),用 in替代它吧 。

D. 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() 的變化, 之前是語句.

E. 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

F. 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的功能。

熱點內容
ehcache存儲對象 發布:2025-05-15 10:35:31 瀏覽:526
搭建虛擬電腦的伺服器 發布:2025-05-15 10:29:31 瀏覽:269
湖人雙核配置哪個最好 發布:2025-05-15 10:09:48 瀏覽:979
手機熱點密碼怎麼查看 發布:2025-05-15 09:54:47 瀏覽:108
生意發力雲存儲 發布:2025-05-15 09:54:45 瀏覽:616
編寫一個shell腳本添加用戶 發布:2025-05-15 09:54:43 瀏覽:505
資料庫查看錶命令 發布:2025-05-15 09:52:27 瀏覽:914
p30是不是自帶方舟編譯器 發布:2025-05-15 09:51:48 瀏覽:599
追擊世界房間密碼是多少 發布:2025-05-15 09:51:46 瀏覽:995
cjavabyte 發布:2025-05-15 09:51:36 瀏覽:463