python 2和3的区别,python3与python2区别

  python 2和3的区别,python3与python2区别

  这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.4.3,所以书上写的地方好多都不适用。

  在最开始把书上的代码进行测试的时候,首先是个输入输出的区别。

  如 书(Python2):

  streamstr = raw_input(type your number:)

  int stream = streamstr

  print stream,

  print stream

  如输入:11 程序运行的结果是 11 11

  但是我用的Python3,除了对input进行报错之外,还有其他的问题。相同的代码用Python3 写过之后是这样的

  streamstr = input(type your number:)

  int stream = streamstr

  print(stream),

  print(stream)

  依然输入:11 程序运行的结果是:11

   11

  查了些资料,问题首先是raw_input在3里面变成了一个函数input(),书写的方式也不相同了。其次,print语句也变成了函数print()函数,并且3里面的逗号不具备不换行的作用。

  在发现这些疑问后查了些关于Python2和Python3的区别,记录在下,总的来说在这个阶段,Python2比Python3更有优势,从程序的性能到支持的函数和架包,Python3都有待优化和增强。从这些方面来看,2到3不像是更新,倒反而变得差了。

  

  

  1.性能

  Py3.0运行pystone benchmark比Py2.5慢30%,Jqdzm认为Py3.0有很大的优化空间,在字符串和整形操作中都可以使用。

  从而达到良好的优化效果。

  Py3.1的性能比Py2.5慢15%,还有很大的提升空间。2.编码 py3.x源文件默认情况下以utf-8编码,这使得以下代码合法:

  中国=中国

  印刷品(中国)

  中国3. 语法

  1)删除,用全部代替!=

  2)删除```,并使用repr()代替。

  3)关键字添加为and with,以及True、False、None none。

  4)整数除法返回浮点数。要获得整数结果,请使用//

  5)添加一个非本地语句。使用noclocal x直接分配外围(非全局)变量。

  6)删除print语句,添加print()函数,实现同样的功能。还有exec语句,已经改成了exec()函数。

  例如:

  2.x:打印“答案是”,2*2

  3.x:打印(答案是,2*2)

  2.x:打印x,#用逗号结束,禁止换行符。

  3.X: print(x,end= ) #使用空格而不是换行符

  2.X: print #输出一个新行

  3.X: print() #输出一个新行

  2.X: print sys.stderr,致命错误

  3.X: print(致命错误,file=sys.stderr)

  2.X: print (x,y) # output repr((x,y))

  3.X: print((x,y)) #不同于print(x,y)!

  7)更改了顺序操作符的行为,例如xy,当X和Y类型不匹配时,抛出TypeError而不是返回立即bool值。

  8)更改了输入函数,删除了raw_input,并替换为input:

  2.X: guess=int (raw _ input(输入一个整数:)#读取键盘输入的方法

  3.X:guess=int(input(输入一个整数: ))

  9)移除元组参数解包。不能(a,(b,c)): pass是这样定义函数的。

  10)一种新的八位字节变量,oct()函数也做了相应的修改。

  2.X的方式如下:

  0666

  438

  十月(438)

  0666

  3.x像这样:

  0666

  语法错误:无效标记(pyshell#63,第1行)

  0o666

  438

  十月(438)

  0o666

  11)增加了二进制文字和dydxlz()函数。

  dydxlz(438)

  0b110110110

  _438=0b110110110

  _438

  0b110110110

  12)扩展的迭代解包。在Py3。x,a,b,*rest=seq和*rest,a=seq都是合法的,只需要两样东西:rest是list。

  对象和序列是迭代的。

  13)新的super()不能再向super()传递参数,

  C类(对象):

  def __init__(self,a):

  打印( C ,a)

  D(C)类:

  def __init(self,a):

  超级()。__init__(a) #调用不带参数的super()

  D(8)

  C 8

  __main__。0x00D7ED90处的d对象

  14)新的元类语法:

  Foo类(* bases,**kwds):

  及格

  15)支持类装饰器。用法与函数装饰器相同:

  def foo(cls_a):

  def print_func(自身):

  打印(“你好,世界!”)

  cls_a.print=打印_功能

  返回cls_a

  @foo

  C类(对象):

  及格

  c()。打印()

  你好,世界!

  Class decorator可以用来玩狸猫换太子的大招。更多信息请参见PEP 31294. 字符串和字节串

  1)现在只有一种类型的字符串,str,但是和unicode版差不多。

  2)对于字节字符串,请参考数据类型的第二个条目5.数据类型

  1)Py3。x去掉了long类型,现在只有一个整数——int,但是它的行为像2。x版龙。

  2)增加了bytes类型,对应于2.x版的八位字节字符串,定义字节文字的方法如下:

  b=b“中国”

  类型(b)

  类型字节

  字符串对象和字节对象可以通过使用。encode()(字符串字节)或。decode()(字节-字符串)方法。

  s=b .解码()

  s

  中国

  b1=标准编码()

  b1

  “中国”

  3)字典的。keys(),项目和。values()方法返回迭代器,而之前的函数如iterkeys()则被丢弃。还删除了

  Dict.has_key(),替换为in6.面向对象 1)引入Abstraact基类(ABCs)。

  2)容器类和迭代器类被字母表化,所以聚会模块里的类型比Py2.5多了很多。

  导入收藏

  打印( \n .加入(目录(集合)))

  请求即付的

  容器

  可哈希的

  项目视图

  可迭代的

  迭代程序

  按键视图

  绘图

  MappingView

  可变映射

  可变序列

  可变集

  命名元组

  顺序

  一组

  特定大小的

  值视图

  __全部_ _

  __内置_ _

  __doc__

  __文件_ _

  __姓名_ _

  _abcoll

  _itemgetter

  _sys

  默认字典

  双端队列

  另外,数值类型也被字母表化。关于这两点,请参阅人教版3119和人教版3141 .

  3)迭代器的下一个()方法改名为__下一个_ _(),并增加内置函数下一个(),用以调用迭代器的__下一个_ _()方法

  4)增加了@抽象方法和@abstractproperty两个装潢师,编写抽象方法(属性)更加方便。7.异常

  1)所以异常都从基本异常继承,并删除了标准错误

  2)去除了异常类的序列行为和。消息属性

  3)用引发异常(参数)代替引发异常,参数语法

  4)捕获异常的语法改变,引入了如同关键字来标识异常实例,在Py2.5中:

  尝试:

  .引发notimplementererror("错误")

  .NotImplementedError除外,错误:

  .打印错误。消息

  .

  错误

  在Py3.0中:

  尝试:

  引发notimplementererror("错误")

  除了NotImplementedError作为错误:#注意这个如同

  打印(字符串(错误))

  错误

  5)异常链,因为__上下文_ _在3.0a1版本中没有实现8.模块变动

  1)移除了cPickle模块,可以使用泡菜模块代替。最终我们将会有一个透明高效的模块。

  2)移除了imageop模块

  3)移除了audiodev,Bastion,bsddb185,异常、linuxaudiodev、md5、MimeWriter、mimify、popen2、

  rexec,sets,sha,stringold,strop,sunaudiodev,timing和xmllib模块

  4)移除了bsddb模块(单独发布,可以从http://www.jcea.es/programacion/pybsddb.htm获取)

  5)移除了新的模块

  6)os.tmpnam()和os.tmpfile()函数被移动到生成临时文件名称模块下

  7)标记化模块现在使用字节工作。主要的入口点不再是生成_令牌,而是令牌大小。令牌ize()9.其它 1)xrange()改名为range(),要想使用范围()获得一个列表,必须显式调用:

  列表(范围(10))

  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  2)字节对象不能哈希,也不支持b.lower()、b.strip()和分裂()方法,但对于后两者可以使用b.strip(b

  \n\t\r \f )和分裂(b )来达到相同目的

  3)zip()、map()和过滤器()都返回迭代器。而apply()、callable()、constent()、execfile()、reduce()和再装

  ()函数都被去除了

  现在可以使用哈撒特尔()来替换可调用()。哈撒特尔()的语法如:hasattr(字符串, __name__ )

  4)字符串。字母和相关的。小写字母和。大写字母被去除,请改用字符串。_字母等

  5)如果x y的不能比较,抛出异常异常2.x版本是返回伪随机布尔值的

  6)__获取切片_ _系列成员被废弃[医]的根据上下文转换为a.__getitem__(slice(I,j))或__setitem__和

  __delitem__调用

  7)文件类被废弃,在Py2.5中:

  文件

  类型"文件"

  在Py3 .X中:

  文件

  回溯(最近一次呼叫):

  模块中文件" pyshell#120 "的第一行

  文件

  名称错误:未定义名称"文件"

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

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