最近總是遇到一些煩心的事情,比如用Python3.5來寫一些代碼,有些不太懂的地方,就去網上找答案,卻發現很多都是基於python2.x的。
今天我就來說點遇到的一些問題。
Unicode 字串
在Python2中,一般字元串是以8位ASCII碼進行儲存的,而Unicode字串則儲存為16位unicode字串,這樣能夠表示更多的字元集。使用的文法是在字串前面加上首碼 u。
在Python3中,所有的字串都是Unicode字串。
urllib
urllib是Python內建的一個擷取網路資料的庫,在Python 2中常用的擷取網路資料的方法是urllib.urlopen(),而在Python 3中,該方法不再存在,其中urllib.urlopen()在Python 3中的等價表達是urllib.request.urlopen()。
Py2裡面輸入用raw_input()
Py3裡面輸入用input()
python3裡面input預設接收到的是str類型
python2裡面卻認為是int類型
num = input("Please input a number:")
Please input a number:45
type(num)
Out[54]: str
以下是一些常見的不同:
0x00:
filter(),遇到類似<filter object at 0x000001E2CE37F390>問題
在3.x中filter 函數返回的對象從列表改為 filter object(迭代器),要想返回一個列表可以添加list(),另外也支援迭代操作,如for迴圈。
0x01:
range(),在3.x中filter 函數返回的對象是range object,如截圖加list()即可解決。
0x02:
map() ,遇到類似<map at 0x1e2ce323160>。
這是因為在python3裡面,map()的傳回值已經不再是list,而是iterators 。
只需將iterator 轉換成list 即可, 比如 list(map())。
0x03:
reduce(),遇到NameError: name 'reduce' is not defined問題。
因為在進入python 3.x以後, reduce已經不在built-in function裡了。
只需:from functools import reduce
Python 2.7的整數除法運算結果仍是整數,Python 3.x已經改進了整數的除法運算,“/”除將得到浮點數,“//”除才仍是整數。
在python2.x中,dict.keys()返回一個列表,在python3.x中,dict.keys()返回一個dict_keys對象,比起列表,這個對象的行為更像是set,所以不支援索引的。解決方案:list(dict.keys())[index]