Python2.7在进入2020年后将不再得到保护。
起初,官方并没有给出详细的日期标明何时停用Python2.7。最近,停用日期已更新为2020年1月1日。
Python2,谢谢你这么多年来提供的忠实服务。Python3,现在该你上场了。
大问题:Python3并不向后兼容。
这通常是一件功德。Python3纠正了该编程语言中的一些根本性的规划缺陷和冗余之处,这应该会带来更简洁、更优雅的代码。但这也意味着Python2.x代码并不自动与Python3兼容。
该如何开始入手?
假如你在乎的代码仍运用Python2,这完全能够了解。PyPI的盛行软件包大多数现在运用Python2和3,如今每天更多的软件包在不断增加中。另外,许多重大的Python项目郑重许诺很快中止支持Python2。为了使过渡更顺利,官方移植攻略(https://docs.python.org/3/howto/pyporting.html)给出了建议,协助用户将Python2代码移植到Python3。
就因为Python2.7在进入2020年后不再得到保护并不意味着你的应用程序或代码库会忽然中止运行。假如你的项目很安稳很可靠,又没有任何安全方面的问题,何必修复并没有坏掉的系统?你甚至能够同时具有Python2项目和Python3项目,并在不同的.conda环境中轻松办理它们。
,python2.7和python3的区别,Python的3.0版别,常被称为Python3000,或简称Py3k。相关于Python的前期版别,这是一个较大的升级。为了不带入过多的累赘,Python3在规划的时分没有考虑向下相容。许多针对前期Python版别规划的程式都无法在Python3上正常履行。
为了照料现有程式,Python2.6作为一个过渡版别,根本运用了Python2的语法和库,一起考虑了向Python3的搬迁,允许运用部分Python3的语法与函数。
随着Python言语商场份额的增长,第三方库都正在努力地相容Python3.x版别,所以假如想要学习Python的朋友们,最好从Python3开始学起,尽管Python2慢慢将淡出商场,但是咱们还是有必要了解两者之间的区别。
1.print函数
print句子没有了,取而代之的是print()函数。
Old:print”Theansweris”,2*2New:print(“Theansweris”,2*2)Old:printx,#TrailingcommasuppressesnewlineNew:print(x,end=””)#AppendsaspaceinsteadofanewlineOld:print#PrintsanewlineNew:print()#Youmustcallthefunction!Old:print>>sys.stderr,”fatalerror”New:print(“fatalerror”,file=sys.stderr)Old:print(x,y)#printsrepr((x,y))New:print((x,y))#Notthesameasprint(x,y)!
2.整除
Python2中/的成果是整型,Python3中是浮点类型。
Python2:
>>>1/20>>>1.0/2.00.5
Python3:
>>>1/20.5
3.Unicode
Python2默许编码是ASCII,在运用Python2的过程中经常会遇到编码问题,当时由于Python言语还没运用Unicode,所以运用ASCII作为默许编码。Python3默许编码是Unicode(utf-8),也就不需求在文件头部写#coding=utf-8。
Python2:
>>>str=”我爱北京天安门”>>>str’\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8′>>>sys.getdefaultencoding()’ascii’
Python3:
>>>str=”我爱北京天安门”>>>str’我爱北京天安门’>>>sys.getdefaultencoding()’utf-8′
4.迭代器
在Python2中许多回来列表目标的内置函数和办法在Python3都改成了回来类似于迭代器的目标,由于迭代器的惰性加载特性使得操作大数据更有效率。Python2中的xrange在Python3中重命名为range。
Python2:
>>>[xforxinxrange(10)][0,1,2,3,4,5,6,7,8,9]
Python3:
>>>[xforxinrange(10)][0,1,2,3,4,5,6,7,8,9]>>>[xforxinxrange(10)]NameErrorTraceback(mostrecentcalllast)in()—->1[xforxinxrange(10)]NameError:name’xrange’isnotdefined
另外,字典目标的dict.keys()、dict.values()办法都不再回来列表,而是以一个类似迭代器的”view”目标回来。Python2:
>>>dic1={‘a’:1,’b’:2,’c’:3,’d’:4,’e’:5}>>>dic1.keys()>>>dic1.values()[‘a’,’c’,’b’,’e’,’d’][1,3,2,5,4]
Python3:
>>>dic1={‘a’:1,’b’:2,’c’:3,’d’:4,’e’:5}>>>dic1.keys()>>>dic1.values()dict_keys([‘a’,’b’,’c’,’d’,’e’])dict_values([1,2,3,4,5])
高阶函数map、filter、zip回来的也都不是列表目标了,关于比较高端的reduce函数,它在Python3.x中现已不属于built-in了,被挪到functools模块傍边。
Python2:
#类型是built-infunction(内置函数)>>>map>>>filter#输出的成果类型都是列表>>>map(lambdax:x*2,[1,2,3])[2,4,6]>>>filter(lambdax:x%2==0,range(10))[0,2,4,6,8]
Python3:
>>>map>>>map(print,[1,2,3])>>>filter>>>filter(lambdax:x%2==0,range(10))
map、filter从函数变成了类,其次,它们的回来成果也从当初的列表成了一个可迭代的目标,咱们尝试用next函数来进行手工迭代。
>>>f=filter(lambdax:x%2==0,range(10))>>>next(f)0>>>next(f)2
5.不等运算符
Python2中不等于有两种写法!=和<>;Python3中去掉了<>,只有!=一种写法,我并未运用过<>。
6.数据类型
Python3去除了long类型,现在只有一种整型——int,但它的行为就像Python2版别的long;
新增了bytes类型,对应于Python2版别的八位串
7.True和False
True和False在Python2中是两个大局变量(名字),在数值上分别对应1和0,既然是变量,那么就可以从头指向其它目标。
>>>False=’1′>>>False’1′>>>ifFalse:…print(“?”)…?
Python3修正了这个缺点,True和False变为两个关键字,永远指向两个固定的目标,不允许再被从头赋值。
>>>True=1File””,line1SyntaxError:can’tassigntokeyword
8.nonlocal
global适用于函数内部修改大局变量的值,但是在嵌套函数中,想要给一个变量声明为非局部变量是没法实现的,在Python3中,新增了关键字nonlcoal,使得非局部变量成为可能。
Python2:
deffunc():c=1deffoo():nonlocalcc=12foo()print(c)func()File””,line4nonlocalc^SyntaxError:invalidsyntax
Python3:
deffunc():c=1deffoo():nonlocalcc=12foo()print(c)func()#12
9.经过input()解析用户的输入
在python2中raw_input()和input(),两个函数都存在,其间区别为:raw_input()—将一切输入作为字符串看待,回来字符串类型;input()—–只能接纳”数字”的输入,在对待纯数字输入时具有自己的特性,它回来所输入的数字的类型(int,float)。
在python3中raw_input()和input()进行了整合,去除了raw_input(),仅保留了input()函数,其接纳任意任性输入,将一切输入默许为字符串处理,并回来字符串类型。
10.异常
except关键字的运用在Python3中处理异常也细微的改变了,在Python3中咱们现在运用as作为关键词。
Python2:
print’Python’,python_version()try:let_us_cause_a_NameErrorexceptNameError,err:printerr,’–>ourerrormessage’Python2.7.6name’let_us_cause_a_NameError’isnotdefined–>ourerrormessage
Python3:
print(‘Python’,python_version())try:let_us_cause_a_NameErrorexceptNameErroraserr:print(err,’–>ourerrormessage’)Python3.4.1name’let_us_cause_a_NameError’isnotdefined–>ourerrormessage
raise句子运用逗号将抛出目标类型和参数分开,3.x取消了这种奇葩的写法,直接调用结构函数抛出目标即可。
11.For循环变量和大局命名空间走漏
在Python3中for循环变量不会再导致命名空间走漏。
“列表推导不再支持[…forvarinitem1,item2,…]这样的语法。运用[…forvarin(item1,item2,…)]替代。也需求提醒的是列表推导有不同的语义:他们关闭了在`list()`结构器中的生成器表达式的语法糖,并且特别是循环控制变量不再走漏进周围的效果范围域.”
Python2:
print’Python’,python_version()i=1print’before:i=’,iprint’comprehension:’,[iforiinrange(5)]print’after:i=’,iPython2.7.6before:i=1comprehension:[0,1,2,3,4]after:i=4
Python3:
print(‘Python’,python_version())i=1print(‘before:i=’,i)print(‘comprehension:’,[iforiinrange(5)])print(‘after:i=’,i)Python3.4.1before:i=1comprehension:[0,1,2,3,4]after:i=1
12.承继
classA:def__init__(self):print(“A”)classB(A):passclassC(A):def__init__(self):print(“C”)classD(B,C):passd1=D()
Python2成果为A,Python3成果为C。
python2的承继次序是D->B->A->C深度优先python3的承继次序是D->B->C->A广度优先。
Tips:本站所有资源均收集自互联网,分享目的仅供学习参考,资源版权归该资源的合法拥有者所有。
Tips:若本站所发布的资源侵犯到您的合法权益,请及时联系 hqteam@qq.com 删除!
暂无评论内容