python 2x和python 3x的区别_python2x和3x区别
Python - 2x和3x的區別
編碼:
回到頂部
Python2的默認編碼是ASCII碼,這是導致Python2中經常遇到編碼問題的主要原因之一,至于原因,在于Python這門語言出現的時候,還沒有Unicode!
Python3默認編碼是Unicode,因此,不必再文件頂部寫# codeing=utf-8了。
#Python2:
importsys>>>sys.getdefaultencoding()'ascii'
#Python3:
importsys>>>sys.getdefaultencoding()'utf-8'
查看默認編碼
字符串:
回到頂部
Python2中,字符串有兩種類型,Unicode和str,前者表示文本字符串,后者表示字節序列,但在Python2中并沒有嚴格的界限,所以容易出錯。
Python3中,str表示字符串,byte表示字節序列,任何需要寫入文本或者網絡傳輸的數據都只接收字節序列,這就從源頭上阻止編碼錯誤的問題。
True和False:
回到頂部
Python2中true和false是兩個全局變量,在數值上對應1和0
Python3則把true和false指定為關鍵字,永遠指向兩個固定的對象,不能被重新賦值
#Python2:
>>> True =False>>>True
False>>> True = 1
>>>True1
>>> False = 'x'
>>>False'x'
#Python3:
>>> True =False
File"", line 1SyntaxError: can't assign to keyword
>>> True = 1File"", line 1SyntaxError: can't assign to keyword
>>> importkeyword>>> keyword.iskeyword('True')
True>>>keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
True和False的區別
nonlocal:
回到頂部
Python2中無法給嵌套函數中的變量聲明為非局部變量,只能使用global關鍵字聲明某個變量為全局變量
Python3中新增關鍵字nonlocal,可以解決這一問題
a = 3
deffunc1():
a= 1
deffoo():
a= 2foo()print(a) #1
func1()deffunc2():
a = 1
def foo():
nonlocal a
a = 2
foo()
print(a) # 2
func2()
nonlocal
語法:
回到頂部
去除了 <> ,全部使用 !=? # python2兩個都可以,python3則只能用 !=
去除 '' ,新增repr()
新增關鍵字:as,with,True,False,None
整形除法返回浮點數,如想要得到整形結果,使用 //
去除print語句,變為print()函數實現相同功能,同樣的還有exec語句,改為exec()函數
改變了順序操作符的行為,例如,x > y,當x和y類型不同時則拋出TypeError,而不是返回bool值
輸入函數由raw_input改為input
去除元組參數解包,不能再def(a,(b,c)):pass這樣定義函數
新的super(),可以不用傳遞參數
#Python2
>>> 6 / 2
3
>>> 6 //2
3
>>> 1 <> 2True>>> 1 != 2True>>> 'a' < 1False>>> 'a' < 1False>>> 'a' > 1True
#Python3
>>> 6 / 2
3.0
>>> 6 //2
3
>>> 1 <> 2File"", line 1
1 <> 2
^SyntaxError: invalid syntax>>> 1 != 2True>>> 'a' < 1Traceback (most recent call last):
File"", line 1, in TypeError:'
!=示例
異常:
回到頂部
異常都繼承BaseException
用 raise Exception(args)代替 raise Exception, args語法
捕獲異常的語法改變,引入了as關鍵字來標識異常實例
模塊:
回到頂部
移除cPickle模塊,可以使用pickle模塊代替
移除imageop模塊
移除bsddb模塊
移除new模塊
os.tmpnam()和os.tmpfile()函數被移動到tmpfile模塊下
tokenize模塊現在使用bytes工作。主要的入口點不再是generate_tokens,而是 tokenize.tokenize()
其它:
回到頂部
xrange()改為range(),要想使用range()獲得一個list,必須顯示調用:list(range(100))
bytes對象不能hash,也不支持 b.lower()、b.strip()和b.split()方法,但對于后兩者可以使用 b.strip(b’
\n\t\r \f’)和b.split(b’ ‘)來達到相同目的
zip()、map()和filter()都返回迭代器。而apply()、 callable()、coerce()、 execfile()、reduce()和reload
()函數都被去除了
Python3中file類被廢棄
#Python2
>>>file
#Python3
>>>file
Traceback (most recent call last):
File"", line 1, in NameError: name'file' is not defined
file示例
摘自:
總結
以上是生活随笔為你收集整理的python 2x和python 3x的区别_python2x和3x区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python转盘抽奖概率_转盘指定概率抽
- 下一篇: Android之TextView属性详解