#xiaodeng #python 3 #1、編碼方式和性能 ''' 1、py3運行效率更快 2、默認源文件編碼ASCII變為UTF-8,以前文件前加入的coding=utf-8不再需要 3、針對unicode的處理有了明顯的改善,效率明顯提升 ''' #2、數據類型和基本運算 ''' 1、int和long進行了統一,統一為int 2、True、False、None都是關鍵詞 3、必須以b'...'表示二進制數據,可以使用u'..'表示字符串,不加u也表示字符串 4、移除<>不等號,使用“!=”表示不等號關系 1)2!=3 2)2<>3 #出現語法錯誤 5、調整除法符號‘/’的用法,只返回浮點數,要返回整數要使用“//” 6、py3運算對數據的類型要求更加的嚴格 ''' def foo(test=None): if test is None: print (test) foo() print (5/2) #浮點數 print (5//2) #整數 print (1/3) #4、print和exec用法 ''' 1、print是一個函數,不再是一個語句,其中不需要用空格,后面打印的內容需要有括號括起來 2、exec函數用法發生變化 ''' def foo(): _local=locals() exec('a=4',globals(),_local) a=_local['a'] print(a) foo() #5、input、bin、oct和for循環 ''' 1、raw_input統一為input 在py2中用法為: 1)a=raw_input('請輸入:') print a 2)a=input('請輸入:') #接收一個有效的表達式,如:2+3,而不能單獨接收3 print a 2、for循環的變量不再泄露在全局變量中,此bug已修復 1)Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> i=8 >>> print [i for i in range(5)] [0, 1, 2, 3, 4] >>> print i 4 #按照道理來講for循環中的i與最外面的i=8的i是不同的,但是這里。。。。。 >>> 2) i=6 print([i for i in range(5)])#結果為[0, 1, 2, 3, 4] print(i)#結果i=6 ''' #6、a=input('請輸入:')#這里不再需要一個有效的表達式,他的用法和raw_input相同 #print(a) #7、range和dict的變化 ''' 1、在python2中,range火xrange會創建一個列表。常出現在for循環、字典、列表中,但是py3中xrange改名為range,在python3中使用 使用xrange會觸發錯誤。同時range返回的是可迭代對象而不再是列表形式,要想使range的結果得到一個list數據必須要使用list(range(5)) 2、字典內的dict.iterkeys(),dict.itervalues(),dict.iteritems()被keys() and values() and items()所替代 他們的返回結果類似於集的可迭代對象,而不是鍵值對的列表。從而在不進行鍵和值條目復制的情況下就能對其執行set操作 ''' a=range(6) print(a)#result:range(0,6)對象,不是列表 print(list(a))#result:[0, 1, 2, 3, 4, 5] for i in range(6): print(i) #print(xrange(5)) #報錯:提示為name"xrange" is'not defined #dict案例 d={'name':"iaodeng",'sex':28} print(d.items()) print(type(d.items())) #<class 'dict_items'> #返回結果 dict_items([('name', 'iaodeng'), ('sex', 28)]) #這里不再是列表形式 ''' Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> d={'name':"iaodeng",'sex':28} >>> print d {'name': 'iaodeng', 'sex': 28} >>> print d.items() [('name', 'iaodeng'), ('sex', 28)] >>> print d.iteritems() #返回一個可迭代對象 <dictionary-itemiterator object at 0x0275E930> >>> for i in d.iteritems():print i ('name', 'iaodeng') ('sex', 28) >>> ''' print('xiaodeng: d.keys():',d.keys()) #xiaodeng: d.keys(): dict_keys(['name', 'sex']) print(type(d.keys()))#<class 'dict_items'> #values()同理 print("既然是可迭代對象,那么還可以進行下面操作") for i in d.items(): print(i) for key in d.keys(): print(key) print("values用法同理") print('用list將可迭代對象轉化為list數據') print(list(d.values())) #7、python3具有單一的str類型,其類型相當於python2的unicode,python3所有的字符串都是unicode #新增bytes類型 a=b"china" print(type(a)) #<class 'bytes'> #str和tytes對象都可以使用encode和decode來進行轉化 s=a.decode() print(s) #china 字符串類型 s=s.encode() print(s) #b"china", tytes字節類型 #8、輸入和輸出 a=open('test.txt','w') a.write("write in something") a.close() b=open("test.txt","r") print(b.read()) #note:注意加括號 """ 1、如果要對文本執行任何I/O操作,python3會強制用戶使用文本模式,打開文件,如果不想使用默認編碼utf-8 通常需要指明所需的編碼 2、如果對二進制數據進行I/O操作,必須使用二進制模式打開文件或進行讀寫操作 eg: f=open("test1.txt","wb+") #二進制追加模式 f.write(b"w love fengmei") #必須加b,以bytes對象的形式進行寫入 f.close() file=open(filename,mode) mode: r:只讀模式 w:只寫,如果文件已存在則會進行覆蓋操作,所以格外小心,如果文件不存在則創建新的文件 a:打開文件用於追加,只寫如果文件不存在則創建 b:二進制,不能單獨使用 經過演變會有很多形式 """ #9、迭代器 """ 1、range在python3中返回顆迭代對象二不是列表,最大限度節約內存 2、zip(),map(),filter(),key(),value()返回的均是可迭代對象 """ #10、異常錯誤處理 """ 1、必須使用關鍵詞as,try 和except NameError as e語句 2、案例: python 2 try: something except NameError,err: print err python3 try: something except NameError as err: print(err) 3、raise觸發語法用法的變化,python3只接受帶括號的 1)raise IOError,"file error" #出現語法錯誤 2)raise IOError("file error") """ #11、面向對象 """ 1、需要單獨深入學習 """ #12、模塊的變動