python3和python2的区别

由于python2停止维护,因此最近将项目代码由python2代码升级到了python3,在这里将一些区别记录下来,供大家参考。

1. 字符输入函数

python2中为raw_input()
python3为input()

2. print

在python3中print语句没有了,取而代之的是print()函数

3. Unicode

python2中一般在文件开头设置文件编码方式为# coding:utf-8,同时将文件源码保存为utf-8。
而python3中默认编码方式为unicode,计算中文字符串字数时非常方便,如len(words),无需作encode(‘utf-8’)处理。但需要注意的几点是:
(1) open(),需要增加encoding编码方式处理,一般为utf-8处理。
(2)requests发送数据时,data字段数据要encode转为bytes,若使用json传递数据则不必

在python3中为了兼容其它操作系统和文本编辑器,还是建议在py文件的首两行的任意一行中加上编码声明。
如果考虑兼容Emacs编辑器,可以使用如下格式(推荐):

-- coding: utf-8 --

如果不考虑兼容Emacs编辑器,为了简洁可以使用如下格式:

coding: utf-8

4. 除法运算

python3中整数和整数相除,结果为float型
Python 2中

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python3中

>>> 1/2
0.5

5. 异常

在 Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。
捕获异常的语法由 except exc, var 改为 except exc as var。
使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。

6. xrange

在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。
python3中应这样使用

>>> type(range(5))
<class 'range'>
>>> list(range(5))
[0, 1, 2, 3, 4]

注意:range函数也是生成器

7. 八进制字面量表示

进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。
新增了一个bin()函数用于将一个整数转换成二进制字串

8. 类型说明

可以对object进行声明,写代码自动联想时极度舒适
def sendMail(from_: str, to: str, title: str, body: str) -> bool:
pass

9. 多个模块被改名(根据PEP8)

旧的名字新的名字
_winregwinreg
ConfigParserconfigparser
copy_regcopyreg
Queuequeue
SocketServersocketserver
reprreprlib

10. 数据类型

1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long

2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

str 对象和 bytes 对象可以使用 .encode() (str -> bytes) 或 .decode() (bytes -> str)方法相互转化。

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 

3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()/iteritems()等函数都被废弃。同时去掉的还有 dict.has_key()。

11. iterable类型

注意:map、filter 、reduce、range返回类型都变成了可迭代类型,而不是list,如:

>>> a = [1,2]
>>> b = filter(lambda x: x % 2 == 0, a)
>>> print(type(b))
<class 'filter'>

只有当执类似join()/list()等操作时,才真正执行过滤

chr 和unichr

python2中chr()参数是0 - 256 的一个整数,返回值是当前整数对应的ascii字符。参数可以是10进制也可以是16进制的形式
python2中unichr()和chr()函数功能基本一样, 只不过是返回unicode的字符,如:

>>> chr(10)
'\n'
>>> unichr(10)
u'\n'
>>> 

而在python3中则没有了unichr函数,只保留chr函数

dict

dict去掉iteritems,仅保留items()属性,返回为iterable类型,同时values()返回也为iterable类型

os.popen()

python3 中os.popen()为非阻塞,需要增加readline()代码做阻塞处理

b64encode

python3中参数和返回值都为bytes类型

>>> base64.b64encode('a'.encode('utf-8'))
b'YQ=='
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值