本文目錄一覽:
- 1、Python 2 和 Python 3 有哪些主要區別
- 2、Python2.6和Python3.0中對除法操作的異同
- 3、詳解python2 和 python3的區別
- 4、新手用python2還是3
- 5、python 如何判斷整除?
- 6、python版本有什麼不同
Python 2 和 Python 3 有哪些主要區別
智游教育為你解答,希望可以幫助到你
python有兩個主要的版本,python2 和 python3
,但是python又不同於其他語言,向下兼容,python3是不向下兼容的,但是絕大多數組件和擴展都是基於python2的,下面就來總結一下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()函數
Python2.6和Python3.0中對除法操作的異同
python2和python3中除法和取余符號是相反的
python2中除法是// ,而python3中的是/
取余相反
在python2中也可以導入python3中對除號用法
需要 from __future__ import division
import這個以後python2中的/和//就和python3中一樣了
不過好像是在python2.7版本中才有__future__模塊
詳解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__ import print_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
‘\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8’
str = u”我愛北京天安門”
str
u’\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8′
Python 3.x
str = “我愛北京天安門”
str
‘我愛北京天安門’
3. 除法運算
Python中的除法較其它語言顯得非常高端,有套很複雜的規則。Python中的除法有兩個運算符,/和//
3.1首先來說/除法:
在python 2.x中/除法就跟我們熟悉的大多數語言,比如Java啊C啊差不多,整數相除的結果是一個整數,把小數部分完全忽略掉,浮點數除法會保留小數點的部分得到一個浮點數的結果。
在python 3.x中/除法不再這麼做了,對於整數之間的相除,結果也會是浮點數。
Python 2.x:
1 / 2
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 :
import math
math.trunc(1 / 2)
math.trunc(-1 / 2)
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
import timeit
n = 10000
def test_range(n):
return for i in range(n):
pass
def test_xrange(n):
for i in xrange(n):
pass
Python 2
print ‘Python’, python_version()
print ‘\ntiming range()’
%timeit test_range(n)
print ‘\n\ntiming xrange()’
%timeit test_xrange(n)
Python 2.7.6
timing range()
1000 loops, best of 3: 433 µs per loop
timing xrange()1000 loops, best of 3: 350 µs per loop
Python 2.7.6
timing range()
1000 loops, best of 3: 433 µs per loop
timing xrange()
1000 loops, best of 3: 350 µs per loop
Python 3
print(‘Python’, python_version())
print(‘\ntiming range()’)
%timeit test_range(n)
Python 3.4.1
timing range()
1000 loops, best of 3: 520 µs per loop
print(xrange(10))
—————————————————————————
NameError Traceback (most recent call last)
ipython-input-5-5d8f9b79ea70 in module()
—- 1 print(xrange(10))
NameError: name ‘xrange’ is not defined
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”, line 1
01000
^
SyntaxError: invalid token
0o1000
512
7. 不等運算符
Python 2.x中不等於有兩種寫法 != 和
Python 3.x中去掉了, 只有!=一種寫法,還好,我從來沒有使用的習慣
8. 去掉了repr表達式“
Python 2.x 中反引號“相當於repr函數的作用
Python 3.x 中去掉了“這種寫法,只允許使用repr函數,這樣做的目的是為了使代碼看上去更清晰么?不過我感覺用repr的機會很少,一般只在debug的時候才用,多數時候還是用str函數來用字元串描述對象。
def sendMail(from_: str, to: str, title: str, body: str) – bool:
pass
多個模塊被改名(根據PEP8)
StringIO模塊現在被合併到新的io模組內。 new, md5, gopherlib等模塊被刪除。 Python 2.6已經支援新的io模組。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合併到http包內。
取消了exec語句,只剩下exec()函數。 Python 2.6已經支援exec()函數。
9. 數據類型
1)Py3.X去除了long類型,現在只有一種整型——int,但它的行為就像2.X版本的long
2)新增了bytes類型,對應於2.X版本的八位串,定義一個bytes字面量的方法如下:
b = b’china’
type(b)
type ‘bytes’
str對象和bytes對象可以使用.encode() (str – bytes) or .decode() (bytes – str)方法相互轉化。
s = b.decode()
s
‘china’
b1 = s.encode()
b1
b’china’
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函數都被廢棄。同時去掉的還有 dict.has_key(),用 in替代它吧 。
新手用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的功能。
python 如何判斷整除?
題:如何判斷一個數能否被3整除?(或者被其他任意一個數整除)
方法一:取余
x = input(“input an number:”)
if x % 3 == 0:
print “%d 能被3整除” %(x)
else:
print “%d 不能被3整除” %(x)12345
方法二:還有一種就是將其各個數位上的數字相加,然後除以3,如果能被3整除,則原數字能被3整除。
x = 0
y = raw_input(“input an number:”) #這裡取為字元串的原因是,要遍曆數字的各個數位
for i in y:
print int(i)
x = x + int(i) #將數字的各個數位上的數字加起來
print x
if x % 3 == 0:
print “%s 能被3整除” %(y)
else:
print “%s 不能被3整除” %(y)1234567891011
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
原創文章,作者:HGKFH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/324971.html