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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。