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?

文件?

名称错误:未定义名称“文件”