python2.xyupython3.x区别总结.docx_第1页
python2.xyupython3.x区别总结.docx_第2页
python2.xyupython3.x区别总结.docx_第3页
python2.xyupython3.x区别总结.docx_第4页
python2.xyupython3.x区别总结.docx_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Search 标题 文字蟒蛇Python2orPython3Python2orPython3首页最近更新查找网页帮助目录Python2orPython3页不变页面信息附件 用户登录我应该使用Python 2或Python 3进行开发活动吗?内容我应该使用Python 2或Python 3进行开发活动吗?有什么区别?我应该使用哪个版本?但是我不想避免2.x?这是一个有很多错误的古老语言,它花了一个主要版本来让他们出来。我想使用Python 3,但是我只想使用这个Python 2.x的这个小型库。我真的需要恢复使用Python 2或放弃使用该库吗?我决定在3.x中写一些东西,但是现在有人想要使用只有2.x的东西。我该怎么办?在通用代码库中支持Python 2和Python 3可能有助于在Python 2和Python 3之间进行选择的其他资源脚注 有什么区别?简短版本:Python 2.x是旧版,Python 3.x是该语言的现在和未来Python 3.0于2008年发布。最终的2.x版本2.7版本在2010年年中发布,并声明对这一生命周期版本进行了扩展支持。之后,2.x分支机构将看不到新的主要版本。3.x正在积极发展,已经有超过五年的稳定版本,包括2012年的3.3版,2014年的3.4个,2015年的3.5个,2016年的3.6个。这意味着例如所有最近的标准库改进仅在Python 3.x中可用。Guido van Rossum(Python语言的原始创建者)决定正确地清理Python 2.x,而不用考虑向后兼容性,而不是2.x范围内的新版本。最大的改进是更好的Unicode支持(默认情况下,所有文本字符串都是Unicode)以及saner字节/ Unicode分隔。此外,核心语言的几个方面(例如打印和执行语句,使用分区的整数)已被调整为使新手更容易学习,并与其他语言更加一致,而旧的拼图已被删除(例如,所有类现在都是新样式的,“range()”返回一个高效的内存可迭代,而不是像2.x中的列表)。在什么新的Python 3.0文档提供的主要语言的变化,并与现有的Python 2.x的代码不兼容的可能的来源一个很好的概述。Nick Coghlan(CPython核心开发人员之一)也创建了一个相对较广泛的关于转换的FAQ。然而,更广泛的Python生态系统多年来已经积累了大量优质的软件。3.x中的反向兼容性的缺点是,其中一些软件(特别是公司内部的软件)仍然不能在3.x上运行。我应该使用哪个版本?您应该使用哪个版本主要取决于您想要完成的任务。如果您可以使用Python 3.x完成所需的任务,那么很棒!有一些小的缺点,如非常略差库支持1,事实上,目前一些Linux发行版和Mac电脑仍然使用2.X的默认(尽管Python 3个中附带了很多的),但作为一个Python语言3 .x肯定准备好了。只要Python 3.x安装在用户的计算机上(这应该是简单的,因为很多阅读这个人的人只能为自己或他们控制的环境开发某些东西),而你正在写的东西,你不知道需要Python 2.x模块,这是一个很好的选择。此外,大多数Linux发行版都已经安装了Python 3.x,并且它们都可用于最终用户。有些正在淘汰Python 2作为预装的默认值。2特别是,向新程序员介绍Python的教师应该首先考虑教Python 3,然后再引入Python 2中的差异(如果需要的话),因为Python 3 消除了许多怪癖,这些怪癖可能会使开始的程序员试图学习Python 2。但是,有一些关键问题可能需要您使用Python 2而不是Python 3。首先,如果您部署到您无法控制的环境中,那么可能会强加一个特定版本,而不是允许您从可用版本中自由选择。其次,如果要使用尚未具有与Python 3兼容的发布版本的特定第三方软件包或实用程序,并且移植该软件包是一项非常重要的任务,您可以选择按顺序使用Python 2以保留对该包的访问。Python 3已经广泛地支持创建GUI应用程序,Tkinter在标准库中。Python 3已经被PyQt支持,几乎从Python 3发行的那一天开始,PySide在2011年添加了Python 3支持。可以使用支持Python 3的PyGObject创建GTK + GUI ,并且是PyGtk的后继。许多其他主要软件包已被移植到Python 3,包括:NumPy和SciPy(用于数字处理和科学计算)Django,Flask,CherryPy和Pyramid(网站)PIL(图像处理模块)被其叉式枕头取代,它支持Python 3。cx_Freeze(用于包装应用程序及其依赖项)py2exe(为Windows用户打包应用程序)OpenCV 3(一个开源计算机视觉和机器学习库)现在支持版本3.0和更高版本的Python 3。请求(一个人类的HTTP库)lxml(一个功能强大的Pythonic XML处理库,将libxml2 / libxslt与ElementTree API 相结合)BeautifulSoup4(用于解析HTML和XML的屏幕抓取库)用于交互式计算的IPython / Jupyter项目完全支持Python 3。和许多,更多!如果你想使用Python 3.x,但是由于依赖性而害怕,可能值得先做一些研究。这是一个正在进行的工作,这个wiki页面可能已经过时了。此外,由Python 2.6+和Python 3.3+支持的大型常用子集,许多现代Python代码应该在Python 3上大部分未经修改,尤其是与Web和GUI框架互操作的代码,强制应用程序正确区分二进制数据和文本(可能需要来自六个兼容性模块的一些帮助来处理名称更改。尽管官方python文档和教程已经完全更新为Python 3,但仍然有很多文档(包括示例)在Web上和使用Python 2的参考书籍,尽管更多的是一直在更新。这可能需要一些调整,以使事情与Python 3的工作。有些人只是不想使用Python 3.x,这是它们的特权。但是,他们在少数。值得注意的是,如果您希望使用Python的替代实现,例如IronPython,Jython或Pyston(或Python平台或编译器实现的较长列表之一),Python 3的支持仍然相对较少。如果您有兴趣选择此类实现,以便与其他系统集成或执行性能,可能会影响您。但是我不想避免2.x?这是一个有很多错误的古老语言,它花了一个主要版本来让他们出来。嗯,不完全 3.0和3.1中的一些较少破坏性的改进分别已经反映到2.6和2.7。有关回迁功能的详细信息,请参阅在Python 2.6的新增功能和什么新的Python 2.7。一个非穷尽的功能列表,仅在3.x版本中可用,不会被转载到2.x系列:字符串默认为Unicode干净的Unicode /字节分离异常链接函数注释关键字参数的语法扩展元组拆包非局部变量声明此外,语言演进不仅限于核心语法或语义变化。它还关注标准库,在3.x中进行了许多改进,不会直接转发到Python 2.请参见Python 3中的新增功能。然而,许多标准库的改进也可通过PyPI获得。也就是说,写得很好的2.x代码可能很像3.x代码。这可能意味着许多事情,包括使用新式类,不使用古老的不推荐的奥术咒语打印,使用可用的惰性迭代器等。一个实际的例子:良好的2.x代码通常将使用xrange而不是范围; xrange是Python 3.x范围实现的起点(尽管Python 3中的范围更好,因为它可以处理大于sys.maxint的值)。应该注意的是xrange()不包括在Python 3中。最重要的是,建议您专注于编写好的代码,以便2.x与3.x不再是一个问题。包括编写完整的单元测试套件,并获得Unicode权限。(Python 3.x相对于Unicode而言比Unicode少得多2.x认为这是一件好事,虽然它使一些软件包变得非常烦人。)我想使用Python 3,但是我只想使用这个Python 2.x的这个小型库。我真的需要恢复使用Python 2或放弃使用该库吗?假设您找不到已经支持Python 3的替代软件包,您仍然可以考虑几个选项:将库导入3.x. (“移植”意味着您使库工作在3.x.)如果事实证明是非常困难的,并且所有其他的依赖项确实存在于2.x中,那么请考虑从2.x开始。正如已经在其他地方所解释的那样,一旦每个依赖关系被成功移植,好的2.x代码通常会使切换变得无痛。确定功能是否真的那么重要。也许你可以放弃它?理想的情况是您尝试将库移植到3.x. 通常你会发现有人已经在这个工作了。即使情况并非如此,现有的项目成员通常也会欣赏这些帮助,特别是随着移植常常在原始软件中发现错误,提高原始和3.x端口的质量。移植并不总是容易的,但通常比从头开始编写自己的东西更容易。在这个Python 2移植指南中解释了你应该怎么做移植。基本思想是使用2.x版本的库,并检查在Python 2中使用-3命令行开关时,所有单元测试是否仍然通过,如果测试失败或发出警告,请修改源并重试(这可能需要降低与旧版本的Python版本的兼容性)。一旦使用-3开关代码运行时没有警告,那么尝试使用Python 3运行它。最好的情况是当这个“工作” - 使用现代Python 2成语编写的代码与Python 3源代码兼容时,在这一点上,“港口”可能已经完成。如果Python 3中的测试仍然失败,那么标准库的2to3实用程序通常可以自动创建一个将在Python 3下运行的版本。或者,Armin Ronacher的python-modernize实用程序代替Python 2.6+和3.2+或3.3+(取决于所使用的命令行选项)。(如果使用后者,检查测试仍然通过Python 2是很重要的!)任何一种方法使得可以从单个2.x代码库并行支持2.x和3.x。这比试图并行维护独立的2.x和3.x分支要容易得多(只是问Python核心开发人员关于那个呢 - 他们已经停止了这么多年了)。如果自动转换或现代化后测试仍然失败,则代码可能会受到Python 2和3之间的语义变化的影响,转换器无法自动处理,也不会被-3开关检测到。这样的问题应该是罕见的,但可能仍然存在 - 如果遇到一个问题,那么值得提交一个针对CPython的错误请求一个新的-3警告。如果涉及到C扩展模块,并且该项目没有使用Cython,cffi或SWIG等包装器生成器自动处理Python 2和3之间的差异,那么移植情况可能会更复杂,但即使这样,它仍然可能是比创建自己的等效包更容易。该延长移植指南介绍了一些关键的差异。在wiki上还有一些更深入的指南:PortingPythonToPy3k,PortingExtensionModulesToPy3k我决定在3.x中写一些东西,但是现在有人想要使用只有2.x的东西。我该怎么办?除了可以从2.x源代码生成3.x代码的2to3工具外,还有3to2工具,其目的是将3.x代码转换回2.x代码。在理论上,这应该比走向另一个方向更好,因为3.x没有这么多讨厌的拐角情况,转换器处理(摆脱尽可能多的那些是打破的主要原因之一向后兼容性毕竟!)。然而,不太可能成功地转换大量使用3.x功能的代码(如函数注释或扩展元组解压缩)。说3to2是在这个阶段比2to3少的路,所以你可能会在这里和那里遇到一些粗糙的边缘。但是,如果要编写3.x代码,这绝对是值得探索的一个想法。在通用代码库中支持Python 2和Python 3Python 2.6+和Python 3.3+的普通子集相当大 - 在Python 3.3中恢复u前缀支持unicode字面意味着语义上正确的Python 2.6+代码可以与Python 3.3+源兼容,而仍然主要是惯用的Python 。主要区别在于,有些事情需要从不同的地方导入,以便处理Python 2和Python 3中具有不同名称的事实。因此,六个兼容性包是在单个代码库中支持Python 2和Python 3的关键实用程序。在未来的兼容性包仍处于测试阶段,不支持Python中的尽可能多的版本六(只可以追溯到像Python 2.6,尽管有六个支持Python 2.4),但允许Python 2兼容的代码中编写方式这更接近习惯Python 3(例如,它包括Python 3字节类型的实际Python 2兼容实现,而不是依赖于暴露稍微不同的API的Python 2.x 8位字符串类型)。识别标准库模块的另一个关键是如果在PyPI上有更多的最新版本,可以优先于2.x标准库版本使用。以下模块是PyPI backports,或者原始模块作为Python 2.7或3.x中的标准库添加源(或灵感):unittest2(Michael Foord,stdlib unittest维护者,主要需要2.6支持)模拟(Michael Foord,stdlib unittest.mock维护者)contextlib2(Nick Coghlan,stdlib contextlib维护者)configparser(?ukaszLanga,stdlib configparser维护者)期货(AlexGr?nholm和Brian Quinlan,stdlib concurrent.futures维持者)argparse(Steven Bethard,stdlib argparse维护者,主要需要2.6支持)faulthandler(Victor Stinner,stdlib faulthandler维护者)cdecimal(Stefan Krah,stdlib十进制维护者)ipaddr(Peter Moody,stdlib ipaddress维护者,Google的IP地址操纵模块,启发了stdlib ipaddress模块?的设计)统计数据(Steven DAprano,stdlib统计维护者)enum34(Ethan Furman,stdlib枚举维护者)funcsigs(Aaron Iles,功能签名对象的backport)用于后台的共享命名空间模块(Brandon Craig Rhodes)backports.inspect(Tripp Lilley,附加检查模块更改的后端,基于funcsigs)backports.datetime_timestamp(Jason R.Coombs,datetime.timestamp方法的backport作为接受datetime对象的模块级函数)backports.pbkdf2(Christian Heimes,stdlib hashlib维护者,hashlib.pbkdf2_hmac的backport)backports.ssl_match_hostname(Brandom Craig Rhodes和Toshio Kuratomi,ssl.match_hostname的后端)backports.lzma(Peter Cock,lzma包装模块的backport)lzmaffi(Tomer Chachamu,替代lzma backport,使用cffi更好的PyPy JIT兼容性)tracemalloc(Victor Stinner,stdlib tracemalloc维护者)pathlib(Antoine Pitrou,stdlib pathlib维护者)选择器 34(Berker Peksag,stdlib选择器模块的backport)使用backports命名空间模块的优点是,它清楚地指出什么时候是标准库功能的跨版本后端,并且还允许在适当时使用原始模块名称,而不会与标准库名称冲突。在ActiveState Python Cookbook中有一些较小的Python 3补充可用作配方。* functools.lru_cache(Raymond Hettinger)以下模块不是backport,而是与标准库API的跨版本兼容的替代方案:请求(较高级别的HTTP和HTTPS API。由于各种技术原因,请求本身不太可能被添加到stdlib中,但是基于asyncio的等价客户端API是一个合理的未来添加)正则表达式(一个替代的正则表达式引擎,原则上批准最终的stdlib包含,但需要一个PEP来确定公司的细节)lxml.etree(ElementTree XML API的替代实现)除了上述支持Python 2的模块之外,添加到Python 3.4中的标准库中的asyncio模块最初是作为Python 3.3的PyPI模块开发的:asyncio(Guido van Rossum,BDFL和stdlib asyncio维护者)要求在Python 3.3中添加“yield from”语法)可能有助于在Python 2和Python 3之间进行选择的其他资源社区网站推广Python 3Nick Efford在Python 3教学编程方面有一些具体的意见:http : /p.leeds.ac.uk/nde/papers/teachpy3.htmlMark Pilgrim已经编写了一个Python 3专注版“Dive Into Python”:http : //diveintopython3/Swaroop CH已经更新了“A Byte of Python”来使用Python 3,同时保留了最新的基于Python 2的版本:http : //notes/Python“ IronPython用户应该了解Python 3”:http : //development/104506/python-3-and-ironpythonPyCon Ireland 2010包括Paul Barry的题为“First First Python 3”的演讲,可以在这里找到:http : //groups/pyconireland/videos/14354395 -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论