Python2.x和Python3.x区别

时间:2022-06-02 07:21:28

      最近总是遇到一些烦心的事情,比如用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循环。

Python2.x和Python3.x区别


0x01:
range(),在3.x中filter 函数返回的对象是range object,如截图加list()即可解决。


Python2.x和Python3.x区别


0x02:
map() ,遇到类似<map at 0x1e2ce323160>。
这是因为在python3里面,map()的返回值已经不再是list,而是iterators 。
只需将iterator 转换成list 即可, 比如 list(map())。


Python2.x和Python3.x区别


0x03:
reduce(),遇到NameError: name 'reduce' is not defined问题。
因为在进入python 3.x以后, reduce已经不在built-in function里了。
只需:from functools import reduce


Python2.x和Python3.x区别


Python 2.7的整数除法运算结果仍是整数,Python 3.x已经改进了整数的除法运算,“/”除将得到浮点数,“//”除才仍是整数。


在python2.x中,dict.keys()返回一个列表,在python3.x中,dict.keys()返回一个dict_keys对象,比起列表,这个对象的行为更像是set,所以不支持索引的。解决方案:list(dict.keys())[index]