【python】第一日 python2和python3區別 命名方式 三種結構
一、python2和python3區別
1)print 語句區別
python2:print是個class,所以可以不用加括號,print 1,2+3
python3:print是個內建函式,必須加括號,print(1,2+3,end=" ")
2)input區別
python2:input輸入的是int型別,raw_input輸入是str型別
python3:input輸入的是str型別,沒有raw_input
另外幾種輸入方法:
a)sys.stdin.readlines() 輸入最後包含'\n'
b)input().split()-------->map(int,input().split()) python2:返回的是列表 python3:返回的是迭代器
3)整除
python2:print 1/2 得0
python3:print (1/2) 得0.5 print(1//2) 得0
4)range和xrange
python2:range返回的列表,xrange返回的是class xrange,用於for迴圈
python3:range返回的是class range, 用於for迴圈, 想要列表使用list(range(0,4))
5)try except
python2:
try: ...... except Exception,e: ......View Code
python3:
try: ...... except Exception as e: ......
6)編碼
這一篇內容寫的很好:Python問題編碼大終結:https://www.cnblogs.com/vipchenwei/p/6993788.html
首先清楚幾個問題:
1、 編碼和編碼方式
編碼是字符集,編碼方式是從字符集的實現,有gbk,utf-8,ascii等等
python2的字串型別:unicode和str,不區分str和bytes的,如果開頭寫# -*- coding:utf8 -*- 按照utf8讀寫檔案,以及字串也預設按照這個編碼,否則預設按照ascii編碼
x='abc' 這裡abc按照ascii編碼的str # -*- coding:utf8 -*- x='abc' 這裡abc按照utf8編碼
python3的編碼:str和bytes型別,str預設是unicode字符集,bytes是str的實現,可以是gbk,utf8,utf16,utf32
2.編碼和解碼
編碼:把字串變成二進位制(明文-------->密文)
解碼:把二進位制變成字串(密文-------->明文)
python2可以從任何一個地方帶入字串,如果從ascii,utf8,gbk,其他字元編碼的時候,要先解碼成Unicode,然後在encode成其他字串編碼
python3預設從Unicode進入,所以直接可以encode成其他編碼
3.檔案編碼和解碼
檔案編碼:就是把在文件編輯器的文件儲存到硬碟,windows預設是gbk,linux預設是utf8,可以通過locale檢視,
檔案解碼:把檔案從硬碟讀到記憶體,按照什麼方法讀,就是解碼方式
直譯器解碼:和檔案解碼一致,python2預設是ascii,python3預設utf8
一般來說解碼和編碼方式要一致,否則容易亂碼或者錯誤
print("中")
#python2中,如果儲存之後執行,不加# -*- coding:utf8 -*- 的情況下會報錯, 檔案編碼(儲存)是按照utf8或者gbk編碼成二進位制,但是執行時候按照ascii,沒有相對應字元,所以出錯
#python3中,“中”是unicode字元,儲存按照utf8,開啟執行正常(預設utf8解碼),如果按照gbk儲存,開啟則會報錯,但是加上# -*- coding:gbk -*-,就會正常執行
#所以編碼和解碼儘量一致,python中儘量都表明用utf8儲存
4.輸出到螢幕
這個是記憶體到記憶體的轉換,所以編碼錯亂會亂碼或者報錯
python2:沒有bytes,所以轉為utf8的仍然是字串,想看二進位制碼用repr
python3:只有bytes,所以轉為utf8之後是二進位制碼,想看字串,在decode回去
python2
# -*- coding:gbk -*- s_gbk = "周" s_utf8 = s_gbk.decode('gbk').encode('utf8') s_unicode = s_gbk.decode('gbk') print("s_utf8: " + s_utf8) #s_utf8: 鍛 utf8輸出到cmd,cmd編碼方式是gbk,所以亂碼 print("s_gbk: " + s_gbk) #s_gbk: 周 print("s_unicode: " + s_unicode) #s_unicode: 周 #檔案儲存要用gbk或者ansi
python3:
# -*- coding:gbk -*- s_unicode = "zgl周廣露無敵" s_gbk = s_unicode.encode('gbk') s_utf8 = s_unicode.encode('utf8') print(s_utf8) #b'zgl\xe5\x91\xa8\xe5\xb9\xbf\xe9\x9c\xb2\xe6\x97\xa0\xe6\x95\x8c' print(s_gbk) #b'zgl\xd6\xdc\xb9\xe3\xc2\xb6\xce\xde\xb5\xd0' print(s_unicode) #zgl周廣露無敵