python 3.x和2.x的区别,python3.x是什么

  python 3.x和2.x的区别,python3.x是什么

  Python2.x和Python3.x的主要区别print函数的print语法的变化可能是最广为人知的,但还是值得一提:Python2的print声明被print()函数取代了,这意味着我们要把想要打印的对象用括号括起来。

  Python 2没有额外的括号问题。但相比之下,如果我们以Python 2的方式调用print函数而不使用括号,Python 3就会抛出SyntaxError。Python2

  导入平台打印 Python ,python_version()打印 Hello,World!打印“文本”,打印“在同一行打印更多文本”结果:

  Python 2.7.5

  你好,世界!

  文本在同一行打印更多文本

  Python3

  导入平台print(Python ,python_version())print(Hello,World!)print(某些文本,,end=) print(在同一行打印更多文本)结果:

  Python 3.5.1

  你好,世界!

  一些文本,在同一行打印更多的文本

  在同一行打印更多文本

  除了python3的版本变化,整数计算可以说是非常大的,在迁移过程中可能会造成很大的危险,比如:

  你在Python 2上执行Python 3的代码。因为整除性的变化就是会被忽略(也就是不会抛出语法异常)

  Python2

  打印 3/2=,3/2打印 3//2=,3//2打印 3/2.0=,3/2.0打印 3//2.0=,3//2.0结果:

  3/2=1

  3 //2=1

  3/2.0=1.5

  3 //2.0=1.0

  Python3

  打印( 3/2=,3/2)打印( 3//2=,3//2)打印( 3/2.0=,3//2.0)打印( 3/2.0=,3//2.0)结果:

  3/2=1.5

  3 //2=1

  3/2.0=1.5

  3 //2.0=1.0

  Unicode 2有ASCII str()类型,Unicode()是单独的,不是字节类型。

  现在,在Python 3中,我们终于有了Unicode (utf-8)字符串和一个字节类:byte和bytearrays。

  如Python3。默认情况下,x源文件以utf-8编码,这使得下面的代码合法。

  Python3

  China=chinaprint(中国)结果:

  瓷器;(China)中国

  Python2

  Str=我爱北京天安门广场打印 Str 结果

   xe6 \ x88 \ x91 \ xe7 \ x88 \ xb1 \ xe5 \ x8c \ x97 \ xe4 \ xba \ xac \ xe5 \ xa4 \ xa9 \ xe5 \ xae \ x89 \ xe9 \ x97 \ xa8

  Xchange在Python 2中非常流行,其中Xchange()创建迭代对象。例如:用于循环或列表/集合/字典派生。

  这种性能非常像发电机(例如。《懒评》)。但是这个xrange-iterable是无限的,也就是说你可以无限遍历。

  由于xrange()函数的延迟求值,如果只需遍历一次(比如for循环),它比range()要快。但是不建议你多次重复迭代,因为生成器每次都是从头开始的。

  在Python 3中,range()的实现类似于xrange(),因此不再存在特殊的xrange()函数(在Python 3中,xrange()抛出一个命名异常)。

  import time ITN=10000 def test _ range(n):return for I in range(n):passdef test _ xrange(n):for I in xrange(n):passPython2

  Importprint python ,python _ version () print \ n计时范围() % timeittest _ range (n) print \ n \ n计时范围() % timeittest _ xrange (n)结果:

  Python 2.7.5

  时序范围()

  1000次循环,最好每次循环3: 433秒

  正时范围()

  1000次循环,最好每次循环3: 350秒

  Python3

  Importprint (python ,python _ version ()) print (\ n计时范围())% timeittest _ range (n)结果:

  Python 3.6.4

  时序范围()

  1000次循环,最好每次循环3: 520秒

  不等运算符Python2.x不代表有两种写法!=并且去掉了Python3.x,只!=一个写数据类型Python3.x去掉了long类型,现在只有一种integer ——int,但是它的行为就像2.x中加到long上的bytes类型一样。keys(),项目和。2.x的octet dict对应的values()方法返回迭代器,而之前的iterkeys()等函数则被抛弃。与此同时,dict.has_key()被移除,Python 3中的异常处理略有改变,用in代替了它。在Python 3中,我们现在使用as作为关键字。

  捕捉异常的语法从except exc,var更改为except exc as var。

  使用语法except (exc1,exc2)作为var,可以同时捕获多种异常。Python 2.6已经支持这两种语法。

  2.x时代,所有类型的物体都可以直接扔。在3.x时代,只能抛出从BaseException继承的对象。2.x raise语句使用逗号来分隔抛出的对象类型和参数。3.x取消了这个精彩的写法,直接调用构造函数抛出对象。在2.x时代,代码中的异常不仅表示程序错误,还经常会做普通控制结构应该做的事情。在3.x中,可以看到设计者将异常变得更加具体,只有在出现错误时,才能通过异常捕捉语句进行处理。

  Python2

  Importprint python ,python _ version()try:let _ us _ cause _ a _ name error exception name error,err: printerr,-our errormessage 结果:

  Python 2.7.5

  名称“let_us_cause_a_NameError”未定义—我们的错误消息

  Python3

  Importprint (python ,python _ version())try:let _ us _ cause _ a _ name error exception name error as err:print(err,-我们的错误消息)结果:

  Python 3.6.4

  名称“let_us_cause_a_NameError”未定义—我们的错误消息

  通过input()解析用户的输入好在Python 3中已经解决了将用户的输入保存为str对象的问题。为了避免在Python 2中读取非字符串类型的危险行为,我们必须使用raw_input()来代替。

  返回一个iterable对象而不是一个列表。如果您在xrange中看到它,Python 3中的一些方法和函数现在返回迭代对象——而不是Python 2中的列表。

  因为我们通常只有一次遍历,所以我认为这个改变对于节省内存是有意义的。然而,与生成器相反,如果需要多次遍历,也是可能的。效率没那么高。

  对于那些情况,我们真正需要的是一个list对象,我们可以简单地通过list()函数将迭代对象转换成一个list。

  Python2

  Importprint python ,python _ version()print range(3)print type(range(3))结果:

  Python 2.7.5

  [0, 1, 2]

  类型“列表”

  Python3

  Importprint (python ,python _ version())print(range(3))print(type(range(3)))print(list(range(3))结果:

  Python 3.6.4

  范围(0,3)

  类别“范围”

  [0, 1, 2]

  在Python3中一些经常使用到的不再返回列表的函数和方法:

  zip()map()filter()dictionary ` s . keys()方法dictionary`s.values()方法dictionary`s.items()方法

  Python 3.x中的For循环变量和全局命名空间泄漏,for循环变量将不再导致命名空间泄漏。

  Python 3.x中进行了一项更改,在Python 3.0的新特性中有如下描述:

  “列表派生不再支持语法item1、item2、…]中的var。请改用[… for var in (item1,item2,)]。还需要提醒的是,列表派生具有不同的语义:它们关闭了list()构造函数中生成器表达式的语法糖,尤其是循环控制变量不再泄漏到周围的作用域中。”

  Python2

  Importprint python ,python _ version()I=1 print before:I=,iprint synthesis:,[I for I in range(5)]print after:I=,I result:

  Python 2.7.5

  之前:i=1

  理解:[0,1,2,3,4]

  之后:i=4

  Python3

  导入平台print(Python ,Python _ version())I=1 print( before:I=,I)print( understanding:,[I for I in range(5)]print( after:I=,I)结果:

  Python 3.6.4

  之前:i=1

  理解:[0,1,2,3,4]

  之后:i=1

  特别声明!

  在上述代码在Python3.6和Python2.7中编译成功,其它环境自行测试

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

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