python2与3的区别,Python3和Python2的区别

  python2与3的区别,Python3和Python2的区别

  浅谈Python2和Python3的区别声明:由于博主主要用的是Python3.5,所以文中可能出现一些纰漏,敬请谅解,也可以向我提出来。

  十点区别一、打印打印几乎是每种编程语言必须有的,Python也不例外,而且Python2和Python3最大的区别之一就是打印。在Python2中,打印是一个关键字,如下:

  进口关键字keyword.kwlist[and , as , assert , break , class , continue , def , del , elif , else , except , exec , finally , for , from , global , if , import , in , is , lambda , not , or , pass , print , raise , return , while , with , yield]而在Python3中,打印是一个函数,因此Python3中打印都需要加上括号表示函数,如下:

  帮助(打印)关于内置函数的帮助打印模块内置:打印(.)打印(值,sep= ,end=\n ,file=sys.stdout,flush=False)将值打印到流中,或者默认情况下打印到sys.stdout中。可选关键字参数:文件:一个类似文件的对象(流);默认为当前系统标准输出月:值之间插入的字符串,默认为空格结束:字符串追加在最后一个值之后,默认为换行符冲水:是否强制刷新流。其中value就是要打印的字符串,sep=’ ‘表示默认用空格隔开,end=’\n’表示默认换行。

  例子:end:

  print(hello ,end=)hello print(world )注:Python2不换行只需要用一个逗号,隔开。sep:

  print(hello , world)hello world print(hello , world ,sep=,)hello,world二、输入函数在Python2中,输入函数有两种:输入()和原始输入()

  something=input( input you want do:)input you want do: play basketball print something play basketball something=raw _ input( input you want do:)input you want do: do sports print something do sports 而在Python3中,只保留了输入()函数。

  三、异常处理相比较Python2,Python3在异常处理方面改动得比较多,比如:

  1.异常的继承:在Python2中,在所有类型的对象只要发生异常时就抛出,不需要继承基本异常而在Python3中,只有继承自基本异常的对象才可以被抛出,更加严格规范。

  2.异常的语法:

  在Python2中,异常可以写成:

  try:10/0异常异常,e:打印"错误",e在Python3中,异常则必须加上作为,不然会有语法错误,写成:

  try:10/0 Exception as e:print( Error ,e)因此,我们当然建议Python3这种具有比较规范的编码风格的写法。

  3.异常的捕获:

  在Python2中,异常捕获写成引发异常,参数

  try:10/0异常异常,e:提升值错误,e在Python3中,异常捕获可以写成引发异常(参数)

  try:10/0异常为e:提高值错误(e)四、字符串Python3中,字符串总是由潜艇用热中子反应堆(海底热反应堆的缩写)类型表示,二进制数据则由字节类型表示。

  1.编码问题:

  在Python2中,默认编码是ASCII:

  导入系统打印系统。getdefaultencoding()ascii而在Python3中,默认编码是utf-8:

  导入系统打印(系统。getdefaultencoding())utf-8 2 .字符串类型

  在Python2中,字符串类型有两种,为潜艇用热中子反应堆(海底热反应堆的缩写)类型和采用双字节对字符进行编码类型:

  s1=你好type(s1)type str s2=u 你好type(s2)type unicode s3=b 你好类型(s3)类型" str "而在Python3中,字符串类型只有潜艇用热中子反应堆(海底热反应堆的缩写)类型,外加一个字节类型,主要用来处理二进制数据:

  s1=你好type(s1)class str s2=u 你好type(S2)class str S3=b 中国 type(S3)class bytes 3。潜艇用热中子反应堆(submarine thermal reactor的缩写)和字节的相互转化

  潜艇用热中子反应堆(海底热反应堆的缩写)类型和字节类型可以利用编码()和解码()函数相互转化:

  b=b 我爱python type(b)class bytes s=b . decode()type(s)class str print我爱python b=s . encode()type(b)class bytes print(b)b 我爱 Python 五、运算符1.不等运算符:

  在Python2中,不等符号可以用!=或者表示:

  23True 22False在Python3中,只有一个不等式运算符!=

  2 !=3True 2!=2False 2。类型比较:

  在Python2中,如果两个不同类型的变量相互比较,仍然会返回bool结果:

  [1] 2False [1] 2True上面一个是list,另一个是int。但是Python2对比后还是会给出一个bool结果。

  然而,在Python3中,当这种情况发生时,将直接抛出类型不匹配异常:

  [1] 2 traceback(最近一次调用last): file stdin ,line1,in模块类型错误:无序类型:list () int () 3。除法运算。

  在Python2中,当进行除法运算时,只返回整数部分:

  3/21要保留小数,必须导入除法,如下所示:

  从_ _ Future _ _ Import Division 3/21.5保留两位小数,使用round()函数如下:

  Round (3/2,2) 1.5 round (5/3,2) 1.67而在Python3中,当除法完成时返回浮点数:

  3/21.5 4/22.0要舍入,请使用运算符//:

  5//31要保留两位有效数字,请使用round()函数,如下所示:

  圆(5/3,2)1.67六。在Python2的赋值中,下列写法是错误的:

  a,b,* res=[1,2,3,4] file stdin ,line1a,b,* res=[1,2,3,4]语法错误:无效语法。在Python3中,这种写法是正确的,res自动匹配剩余的变量形成一个列表,如下所示

  a,b,* res=[1,2,3,4] print (res) [3,4] type (res) class list VII。Python2中的高阶函数zip()、map()和filter()直接返回list list

  S1=[1,2,3] S2=[a , b , c] printzip (S1,S2) [(1, a ),(2, b ,(3, c)] type (zip (S1,S2)

  s1=[1,2,3] s2=[a , b , c] print(zip(s1,s2))zip对象at0x 00000228 B1 b44 e 88 print(list(zip(S1,S2))[(1, a ),(2, b ,(3,C)] VIII .Python2中的range/xrange函数,range()函数返回列表list,而xrange()函数一般用于创建迭代对象,如下:

  Range (3) [0,1,2] print [x for x in xRange (5)] [0,1,2,3,4] print list (xrange (5)) [0,1,2,3,4]而在Python3中,只有range()函数,这个范围

  Print (range (5)) range (0,5) print (list (range (5)) [0,1,2,3,4]一点思考:这里我觉得这个改动是为了节省内存。例如:在Python2中,range(1000)返回一个列表。然而,在Python3中,range(1000)返回一个迭代器,因此我们可以在需要时遍历它,从而节省内存空间。

  九。Python2中的生成器函数,生成器函数需要生成另一个生成器生成的值,一般需要嵌套值:

  def chain(* iterable):for it in iterable:for each in it:yield each= ABC m=[1,2,3] printlist (chain (s,m)) [a , b , c ,1,2,3] while in Python3

  def chain(* iterable):for it in iterable:yield from its= ABC m=[1,2,3] print (list (chain (s,m)) [a , b , c ,1,2,3] X. Class in

  class parent(object):def _ _ init _ _(self):self . a=100 class child(parent):def _ _ init _ _(self):super(child,self)。_ _ init _()c=child()printldbbz 100和Python3中的

  class parent(object):def _ _ init _ _(self):self . a=100 class child(parent):def _ _ init _ _(self):super()。_ _ init _ () c=child () print (zldbbz)其他区别一、模块名

  _ winreg-winregconfigparser-configparsercopy _ reg-copyregqueue-queuesocketserver-socketserver pr-repl lib II。exec语句取消exec语句,保留exec()函数。其实Python2.7已经支持exec()函数了。

  三。模块改变字符串。字母字符串。小写字符串。大写上面三个都去掉了,用string.ascii_letters代替string . ascii _ letters . lower()string . ascii _ letters . upper()一点小建议。如果你是Python新手,我建议直接学习使用Python3,因为Python3是大势所趋,很多模块或者库已经不支持Python2了。如果是已经开始Python2的同学,就不用太担心是否要从3弃2,因为语言只是一个工具。要思考背后是什么,透过现象看本质最重要。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: