1. 程式人生 > >【python】第一日 python2和python3區別 命名方式 三種結構

【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周廣露無敵