python2x和python3x的区别_Python2.x和Python3.x的区别

print

print 在Python2中作为语句,在Python3中作为函数

实例1:

print(''hello''):在Python2中(''hello'')是语句的一部分,是一个整体;在Python3中''hello''是作为一个参数出入到函数中。

实例2:

print(''hello'', ''world''):在Python2中输出一个元组,在Python3中输出两个字符串默认中间用空格隔开。

注:在Python2.6+中导入future模块中的print_fuction才能将print当做函数使用。

编码

Python2默认编码ascii,Python3默认编码UTF-8,因此使用Python3不需要文件顶部写‘# coding=utf-8’。

字符串

Python2中字符串有两个类型:unicode和str,前者表示文本字符串,后者表示字节序列,两者没有明显的界限,开发者也感觉很混乱。

Python3中做了严格的区分,str表示字符串,byte表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列。

python编码解码问题.png

补充:encode()和decode()

decode 解码,encode 编码:字符串在Python内部的表示是unicode编码,在做编码转换时,通常需要以unicode作为中间编码, 即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

实例:s='中文' 如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用 decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。

True和False

True和False在Python2中是两个全局变量,数值上对应1和0,既然是变量就可以被赋值,但这样容易造成混乱;故在Python3中 True和False变为两个关键字,永远指向两个固定对象,不允许被重新赋值。

迭代器

Python2中很多返回列表对象的内置函数和方法在Python3中都改成了返回类似于迭代器的对象,迭代器的惰性求值特性使得操作大数据更加有效率。

补充:惰性求值不要求加载好整个迭代过程中所有的元素。迭代器仅仅在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁,大大节约内存。

字典对象dict.keys()、dict.values()方法都不再返回列表,而是生成一个类似迭代器的“view”对象返回。高阶函数map、filter、zip返回也都从列表变成了对象。Python2的迭代器必须实现next方法,二Python3改成了next。

nonlocal

在Python2中可以在函数中使用global声明变量为全局变量,但是给一个变量声明为非局部变量是无法实现的。在Python3,新增了关键字nonlocal,使得定义非jubu变量成为了可能。

1/2在Python2中结果是0,Python3中是0.5

其实也就是Python2中 / 的作用就是地板除,而在Python3中用 // 作为地板除。

模块改名

一些相关的模块放进同一个包里面(如httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib放进了http里面,urllib , urllib2, urlparse, robotparse放进了urllib里面),SocketServer改成了socketserver,Queue改成queue等。

一些新语法

print/exec等成为了函数,格式化字符串变量,类型标注,添加了nonlocal、yield from、async/await、yield for关键词和annotations、context、traceback、qualname等dunder方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值