python2.7和3.0有区别吗?
1.性能?
Py3.0运行pystone benchmark比Py2.5慢30%,Guido认为Py3.0有很大的优化空间,它可以用于字符串和整形操作。
以便获得良好的优化结果。?
Py3.1的性能比Py2.5慢15%,还有很大的提升空间。?
2.编码?
默认情况下,Py3。x源文件使用utf-8编码,这使得下面的代码合法:?
& gt& gt& gt中国= '中国'?
& gt& gt& gt打印?
中国?
3 .语法?
1)删除了
2)删除``并用repr()替换all?
3)关键字包括as和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 & gt;& gtsys.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)改变了顺序操作符的行为,例如x
8)输入功能发生了变化。raw_input已被删除,已使用input代替:?
2.x: guess = int (raw _ input('输入一个整数:')#如何读取键盘输入?
3.X:guess = int(input('输入一个整数: '))
9)移除元组参数并解包。不能def(a,(b,c)):pass这样定义函数?
10)是一个新的八进制字变量,oct()函数做了相应的修改。?
2.x的方式如下:?
& gt& gt& gt0666?
438?
& gt& gt& gt十月(438)?
'0666'?
3.x这样:?
& gt& gt& gt0666?
语法错误:无效标记(& ltpyshell # 63 & gt,行1)?
& gt& gt& gt0o666?
438?
& gt& gt& gt十月(438)?
0o666 '?
11)加二进制文字和bin()函数?
& gt& gt& gt斌(438)?
0b 110110110 '?
& gt& gt& gt_ 438 = ' 0b 110110110 '?
& gt& gt& gt_438?
0b 110110110 '?
12)扩展迭代解包。在Py3。x,a,b,*rest = seq和*rest,a = seq都是合法的,只需要两点:rest是列表吗?
对象和序列是迭代的。?
13)新的super()不能再向super()传递参数。
& gt& gt& gtC类(对象):?
def __init__(self,a):?
打印(' C ',a)?
& gt& gt& gtD类(C类):?
def __init(self,a):?
超级()。__init__(a) #不带参数调用super()?
& gt& gt& gtD(8)?
C 8?
& lt__main__。d对象位于0x 00d 7 ed 90 & gt;?
新的元类语法:
Foo类(* bases,**kwds):?
通过?
15)支持类装饰器。用法和函数装饰器一样:?
& gt& gt& gtdef foo(cls_a):?
def print_func(self):?
打印(“你好,世界!”)?
cls_a.print = print_func?
返回cls_a?
& gt& gt& gt@foo?
C类(对象):?
通过?
& gt& gt& gtc()。print()?
你好,世界!?
Class decorator可以用来玩狸猫换太子的大招。详见PEP 3129?
4.字符串和字节串?
1)现在只有一种类型的字符串,但是和unicode版本2差不多。x..
2)字节字符串请参考数据类型的第2项?
5.数据类型?
1)Py3。x去掉了long类型,现在只有一个integer-int,但是它的行为像2。x版龙?
2)增加了字节类型,对应于版本2的八位字节字符串。十、定义一个字节文字量的方法如下:?
& gt& gt& gt中国?
& gt& gt& gt(b)型?
& lt类型“字节”& gt?
字符串对象和字节对象可以使用。encode()(str-> >;字节)或。decode()(字节-& gt;Str)方法相互转换。?
& gt& gt& gts = b.decode()?
& gt& gt& gts?
中国?
& gt& gt& gtb1 = s.encode()?
& gt& gt& gtb1?
“中国”?
3)字典的。keys(),。项目和。values()方法返回迭代器,而之前的iterkeys()等函数被放弃。也撤了?
Dict.has_key(),替换为in?
6.面向对象?
1)引入了Abstraact基类(ABCs)。?
2)容器类和迭代器类都是ABCs,所以cellections模块中的类型比Py2.5多很多?
& gt& gt& gt导入收藏?
& gt& gt& gt打印(' \n '。join(dir(collections)))?
可赎回?
集装箱?
哈沙布尔?
ItemsView?
可迭代?
迭代器?
KeysView?
映射?
MappingView?
可变映射?
可变序列?
MutableSet?
NamedTuple?
序列?
设置?
大小合适?
ValuesView?
__all__?
__内置_ _?
__doc__?
__file__?
__name__?
_abcoll?
_itemgetter?
_sys?
defaultdict?
德雀?
此外,数值类型也是ABC化的。这两点请参考人教版3119和人教版3141。?
3)迭代器的next()方法重命名为__next__(),增加一个内置函数next()调用迭代器的__next__()方法?
4)增加了两个decorator,@abstractmethod和@abstractproperty,使得编写抽象方法(属性)更加方便。?
7.不正常?
1)所以所有异常都是从BaseException继承的,StardardError被删除?
2)删除序列行为和。异常类的消息属性。
3)用raise Exception(args)代替raise Exception,args语法?
4)捕捉异常的语法变化,引入as关键字来识别异常实例。在Py2.5:?
& gt& gt& gt试试:?
...?引发notimplementererror(' Error ')?
...NotImplementedError除外,错误:
...?打印错误。消息?
...?
错误?
在Py3.0中:?
& gt& gt& gt试试:?
引发notimplementererror(' Error ')?
except not implemented error as error:#注意这个as?
print(str(error))?
错误?
5)异常链,因为__context__在3.0a1版本中没有实现?
8.模块变化?
1)删除了cPickle模块,可以用Pickle模块代替。最终我们将拥有一个透明而高效的模块。?
2)移除了imageop模块?
3)音频Dev,Bastion,BSD DB 185,异常,Linux音频Dev,MD5,MimeWriter,Mimi FY,Popen2,
Rexec,sets,sha,Stringold,Strop,Sun Audio Dev,Timing和xmllib模块?
bsddb模块(单独发布,可从http://www.jcea.es/programacion/pybsddb.htm购买)已被移除?
5)移除新模块?
6)6)OS . tmpnam()和os.tmpfile()的函数移到tmpfile模块中?
7)tokenize模块现在可以处理字节。主入口点不再是generate_tokens,而是tokenize.tokenize()?
9.其他?
1)xrange()被重命名为range()。要使用range()获取列表,必须显式调用:?
& gt& gt& gtlist(范围(10))?
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]?
2)bytes对象不能hash,不支持b.lower()、b.strip()和b.split()的方法,后两者可以使用b . strip(b’。
\n\t\r \f ')和b.split (b ' ')来达到相同的目的?
3)zip()、map()和filter()都返回迭代器。以及apply()、callable()、constent()、execfile()、reduce()和reload?
()函数已被删除。
现在hasattr()可以用来代替callable()的语法。hasattr(),比如hasattr (string,' _ _ name _ ')。
4)字符串.字母及相关。小写和。大写字母被删除。请改用string.ascii_letters?
5)如果X
6)__getslice__系列成员被放弃。A[i:j]转换成一个. _ _ getitem _ (slice (I,j))或__setitem__和?
_ _ delivery _ _ call?
7)7)file类被放弃,在Py2.5中:?
& gt& gt& gt文件?
& lt键入“文件”& gt?
在Py3。x:?
& gt& gt& gt文件?
回溯(最近一次呼叫):?
文件" & ltpy shell # 120 >;",行1,在& lt模块& gt?
文件?
名称错误:未定义名称“文件”