ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:22.85KB ,
资源ID:28215527      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28215527.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(python2 与 python3的区别.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

python2 与 python3的区别.docx

1、python2 与 python3的区别python2 与 python3的区别几乎所有的python2程序都需要一些修改才能正常的运行在python3的环境下。为了简化这个转换过程,Python3自带了一个2to3的实用脚本.这个脚本会将python2程序源文件作为输入,然后自动转换到python但并不是所有内容都可以自动转换。print语句python2中print是一个语句,不论想输出什么,直接放到print关键字后面即可。python3里,print()是一个函数,像其他函数一样,print()需要你将要输出的东西作为参数传给它。python2python3备注printprint()

2、输出一个空白行,python3需要调用不带参数的print()print 1print(1)输出一个值,将值传入print()函数print 1, 2print(1,2)输出使用空格分割的两个值,使用两个参数调用print()print 1, 2,print(1,2, end= )python2中如果使用一个,作为print结尾,将会用空格分割输出的结果,然后在输出一个尾随的空格,而不输回车。python3里,把end= 作为一个关键字传给print()可以实现同样的效果,end默认值为n,所以通过重新指定end参数的值,可以取消在末尾输出回车符号print , 1, 2, 3print(1,

3、 2, 3, file=python2中,可以通过pipe_name语法,把输出重定向到一个管道,比如.在python3里,可以通过将管道作为关键字参数file的值传递给print()完成同样的功能。UNICODE字符串python2中有两种字符串类型:Unicode字符串和非Unicode字符串。Python3中只有一种类型:Unicode字符串。python2python3备注uPapayaWhipPapayaWhippython2中的Unicode字符串在python3即为普通字符串urPapayaWhipfoorPapayWhipfooUnicode原始字符串(使用这种字符串,pyth

4、on不会自动转义反斜线)也被替换为普通的字符串,因为在python3里,所有原始字符串都是以unicode编码的。全局函数UNICODE()python有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成unicode字符串,还有str()把对象转换为非Unicode字符串。Python3只有一种字符串类型,unicode字符串,所以str()函数即可完成所有的功能。LONG长整型python2有非浮点数准备的int和long类型。int类型最大值不能超过,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个来定义长整型,显然,它比int类型表示的数字范围更大。在pyt

5、hon3里,只有一种整数类型int,大多数情况下,和python中的长整型类似。python2python3备注x = Lx = python2中的十进制长整型在python3中被替换为十进制普通整数x = 0xFFFFFFFFFFFFLx = 0xFFFFFFFFFFFFpython2里的十六进制长整型在python3里被替换为十六进制的普通整数long(x)int(x)python3没有long()type(x) is longtype(x) is intpython3用int判断是否为整型isinstance(x, long)isinstance(x, int)int检查整数类型比较运算

6、符Python2支持作为!=的同义词,python3只支持!=, 不再支持字典类方法HAS_KEY()Python2中,字典对象has_key()方法测试字典是否包含指定的键。python3不再支持这个方法,需要使用in.返回列表的字典类方法在python2里,许多字典类方法的返回值是列表。最常用方法有keys, items和values。python3,所有以上方法的返回值改为动态试图。在一些上下文环境里,这种改变不会产生影响。如果这些方法的返回值被立即传递给另外一个函数,而且那个函数会遍历整个序列,那么以上方法的返回值是列表或视图并不会产生什么不同。如果你期望获得一个被独立寻址元素的列表,

7、那么python3的这些改变将会使你的代码卡住,因为视图不支持索引。python2python3备注()list()使用list()将keys 返回值转换为一个静态列表()list()将items返回值转为列表()iter()python3不再支持iterkeys,使用iter()将keys()的返回值转换为一个迭代器i for i in () i for i in ()不需要使用额外的iter(),keys()方法返回的是可迭代的min()no change对min(),max(),sum(),list(),tuple(),set(),sorted(),any()和all()同样有效重命名或

8、重新组织的模块从python2到python3,标准库里的一些模块已经被重命名。还有一些相互关联的模块也被组合或则重新组织,使得这种关联更有逻辑性。HTTPpython3中几个相关的http模块被组合成一个单独的包,即httppython2python3备注import httplibimport 模块实现一个底层的库,可以用来请求和解析httpimport cookieimport 提供一个pythonic接口进行cookies操作import cookielibimport 可以操作cookies文件import BaseHTTPServer import SimpleHTTPServer

9、 import CGIHttpServerimport 实现了一个基本的http服务器URLLIBpython2中用来分析、编码和获取URL的模块,但是比较混乱,python3中,这些模块被重构,组合成为一个单独的包,即urllib| python2 | python3 | 备注 | import urllib | import , import , import | | import urllib2 | import , | | import urlparse | import | | import robotparser | import | | from urllib import Fa

10、ncyURLopener | from import FancyURLopener from | |from urllib2 import Request from urllib2 import HTTPError | from import Request from import HTTPError |DBM所有的DBM现在都在一个单独的包里,即dbm。如果需要其中某个特定的变体,比如GNU DBM,可以导入dbm包中合适的模块。python2python3备注import dbmimport ?import gdbmimport ?import dbhashimport ?import d

11、umbdbmimport ?import anydbm import whichdbimport dbm?XMLRPCXML-RPC是一个通过HTTP协议执行远程RPC调用的轻重级方法。一些XML_RPC客户端和XML_RPC服务端的实现库组合成独立的包,xmlrpc.python2python3备注import xmlrpclibimport ?import DocXMLRPCServer import SimpleXMLRPCServerimport ?其他模块Python2python3备注try: import cStringIO as StringIO except ImportEr

12、ror: import STringIOimport io?try: import cPickle as pickle except ImportError: import pickleimport pickle?import?builtinimport builtins?import copy_regimport copyreg?import Queueimport queue?import SocketServerimport socketserver?import ConfigParserimport configparser?import reprimport reprlib?impo

13、rt commandsimport subprocess?包内的相对导入包是由一组相关联的模块共同组成的单个实体。在python的时候,为了实现同一个包内模块的相互引用,你会使用import foo或者from foo import Bar。Python2解释器会先在当前目录里搜索,然后再去python搜索路径搜索。在python3里这个过程有一点不同。Python3不会首先在当前路径搜索,它会直接在Python的搜索路径里寻找。如果想要包里的一个模块导入包的另一个模块,需要显式的提供两个模块的相对路径。迭代器方法NEXT()python2里,迭代器有一个next()方法,用来返回序列的下一项

14、。在python3里同样成立。但是有一个新的全局的函数next(),它使用一个迭代器作为参数。python2python3备注()next(anIterator)?a_function_that_returns_an_iterator().next()next(a_function_that_returns_an_iterator()?class A: def next(self): passclass A : def?next(self): pass?class A: def next(self, x, y): passno change?next = 42 for an_iterator

15、in a_sequence_of_iterators: ()next =42 for an interator in a_sequence_of_iterators: ()?全局函数FILTER()在python2里,filter()方法返回一个列表,这个列表是通过一个返回值为True或False的函数来检测序列里的每一项的道德。在python3中,filter()函数返回一个迭代器,不再是列表。python2python3备注filter(a_function, a_sequence)list(filter(a_function, a_sequence)?list(filter(a_func

16、tion, a_sequence)no change?filter(None, a_sequence)i for i in a_sequence if i ?for i in filter(None, a_sequence):no change?i for i in filter(a_function, a_sequence)no change?MAP()跟filter()的改变一样,map()函数现在返回一个迭代器,python2中返回一个列表。python2python3备注map(a_function,PapayaWhiplist(map(a_function, PapayaWhip)?

17、map(None, PapayaWhiplist(PapayWhip)?map(lambda x: x+1, range(42)x+1 for x in range(42)?for i in map(a_function, a_sequence):no change?i for i in map(a_function, a_sequence)no change?REDUCE()在python3里,reduce()函数已经从全局名字空间移除,现在被放置在fucntools模块里。python2python3备注reduce(a,b,c)from functools import reduce r

18、educe(a, b, c)?APPLY()python2有一个叫做apply()的全局函数,它使用一个函数f和一个列表a,b,c作为参数,返回值是f(a,b,c).可以直接调用这个函数,在列表前添加一个星号作为参数传递给它来完成同样的事情。在python3里,apply()函数不再存在;必须使用星号标记。python2python3备注apply(a_function, a_list_of_argsa_function(*a_list_of_args)?apply(a_function, a_list_of_args, a_dictionary_of_named_args)a_functio

19、n(*a_list_of_args, *a_dictionary_of_named_args)?apply(a_function, a_list_of_args + z)a_function(*a_list_of_args + z)?apply, a_list_of_args)(*a_list_of_args)?INTERN()? python2里,你可以用intern()函数作用在一个字符串上来限定intern以达到性能优化,python3里,intern()函数转移到sys模块里。python2python3备注intern(aString)(aString)-EXEC就像print语句在

20、python3里变成了一个函数一样,exec语句也是这样的。exec()函数使用一个包含任意python代码的字符串作为参数,然后像执行语句或表达式一样执行它。exec()跟eval()是相似,但exec()更加强大并具有挑战性。eval()函数只能执行单独一条表达式,但是exec()能够执行多条语句,导入(import),函数声明实际上整个python程序的字符串表示也可以。python2python3备注exec codeStringexec(codeString)?exec codeString in a_global_namespaceexec(codeString, a_global

21、_namespace)?exec_codeString in a_global_namespace, a_local_namespaceexec(codeString, a_global_namespace, a_local_namespace?execfilepython中的execfile语句可以像执行python代码那样使用字符串。不同的是exec使用字符串,而execfile使用文件。在python3,execfile语句被去掉了。REPR在python2,为了得到一个任意对象的字符串表示,有一种把对象包装在反引号里(比如x)的特殊语法。在python3里,这种能力仍然存在,但是你不能

22、再使用反引号获得这种字符串表示了,需要使用全局函数repr().python2python3备注xrepr(x)?PapayaWhip +2repr(PapayWhip + repr(2)?TRYEXCEPT语句python到python3,捕获异常的语法有些变化。Python2Python3备注try: import mymodule except ImportError, e passtry: import mymodule except ImportError as e: pass?try: import mymodule except (RuntimeError, ImportErro

23、r), e passtry: import mymodule except(RuntimeError, ImportError) as e: pass?try: import mymodule except ImportError: passno change?try: import mymodule except: passno change?RAISEpython3里,抛出自定义异常的语法有细微的变化。python2python3备注raise MyExceptionunchanged?raise MyException, error messageraise MyException(er

24、ror message)?raise MyException, error messageraise MyException(error message).with_traceback(a_traceback)?raise error messageunsupported?生成器THROW在python2里,生成器有一个throw()方法。调用()会在生成器被暂停的时候抛出异常,然后返回由生成器函数获取的下一个值。python3中,这一功能仍然可用,但语法有一点不同。python2python3备注(MyException)no change?(MyException, error messa

25、ge(MyException(error message)?(error message)unsupported?XRANGE()python里,有两种方法获得一定范围内的数字:range(),返回一个列表,还有xrange(),返回一个迭代器。python3里,range()返回迭代器,xrange()不再存在。python2python3备注xrange(10)range(10)?a_list = range(10)a_list= list(range(10)?i for i in xrange(10)i for i in range(10)?for i in range(10):no c

26、hange?sum(range(10)no changeRAW_INPUT()和INPUT()python2有两个全局函数,用在命令行请求用户输入。第一个叫input(),它等待用户输入一个python表达式(然后返回结果)。第二个叫做raw_input(),用户输入什么他就返回什么。python3 通过input替代了他们。python2python3备注raw_input()inputinput替代了raw_inputraw_input(prompt)input(prompt)python3仍然支持提示符参数input()eval(input)?函数属性FUNC_*python2,函数的代

27、码可用访问到函数本身的特殊属性。python3为了一致性,这些特殊属性被重命名了。python2python3备注_name_属性包含了函数的名字_doc_包含了函数源代码定义的文档字符串是一个保存参数默认值的元组_dict_属性是一个支持任意函数属性的名字空间_closure_属性是由cell对象组成的元组,包含了函数对自由变量的绑定是对模块全局名字空间的引用是一个代码对象,表示编译后的函数体I/O方法XREADLINES()python2中,文件对象有一个xreadlines()方法,返回一个迭代器,一次读取文件的一行。这在for循环中尤其实用。python3中,xreadlines()方

28、法不再可用。lambda函数在python2中,可以定义匿名函数lambda函数,通过指定作为参数的元组的元素个数,使这个函数实际上能够接收多个参数。python2的解释器把这个元组解开“成命名参数,然后可以在lambda函数里引用它们。在python3中仍然可以传递一个元组为lambda函数的参数。但是python解释器不会把它当成解析成命名参数。需要通过位置索引来引用每个参数。python2python3备注lambda (x,): x + f(x)lambda x1 : x10 + f(x10)注lambda (x,y): x + f(y)lambda x_y : x_y0 + f(x_

29、y1)注lambda (x,(y,z): x + y + zlambda x_y_z: x_y_z0 + x_y_z10+ x_y_z11注lambda x,y,z: x+y+zunchanged注注:如果定义了一个lambda函数,使用包含一个元素的元组作为参数,python3中,会被转换成一个包含到x10的引用的lambda函数。x1是2to3脚本基于原来元组里的命名参数自动生成的。注:使用含有两个元素的元组(x,y)作为参数的lambda函数被转换为x_y,它有两个位置参数,即x_y0和x_y1注:2to3脚本可以处理使用嵌套命名参数的元组作为参数的lambda函数。产生的结果有点晦涩,但python3下和python2的效果是一样的。注:可以定义使用多个参数的lambda函数。语法在python3同样有效特殊的方法属性在python2里,类方法可以访问到定义他们的类对象,也能访问方法对象本身。im_self是类的实例对象;im_func是函数对象,im_class是类本身。在python3里,这些属性被重命名,以遵循

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1