热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何过渡至Python3

原文地址:http:www.aaronsw.comweblogpython3译者:yudun1989作为一个普通的Python开发者,不免会碰到Python2到3转换不成功的

原文地址: http://www.aaronsw.com/weblog/python3

译者: yudun1989

作为一个普通的 Python 开发者,不免会碰到 Python 2 到 3 转换不成功的问题。我经常会得到一些请求说要让我写的库能够在 Python 3 中运行,但是对于如何升级这个问题,在我尝试了各种各样解决冲突的建议之后,并没有发现有多少个可行的方案。

确实,当你看到新的 3.x 匆匆发布,却没有多少人来使用,难免会去猜测 Python 是否会在这次艰难的转型中倒下。那么我们应该如何来帮助它越过这道坎?

我似乎看到很多关于 Python 3 彻底的,未来的,崭新的版本特性的讨论,但我们却忽视了升级的方法。在 Python 2 时代,我们有非常清楚的方法来应对版本更新。

  • 在 Python 2.a 版本中, 加入了 from __future__ import new_feature 语句,你就可以明确声明你想要使用的新特性来使用新功能。
  • 在 Python 2.b 版本中, 默认加入了新功能,你不需要在使用之前去声明 future。
  • 在 Python 2.c 版本中,当你在使用旧的方法时,将会产生警告,来通知你改变你的既有代码,或者是停止运行。
  • 在 Python 2.d 版本中,它就真的停止工作了。

这种方法可能确实蛮有效,但是我却不清楚为什么在向 Python 3 转换的过程中,却没有什么效果。它可能只是想表达:

  • Python 2.x 版本将会支持 from __future__ import python3

将这个加在文件的首部将会声明这是一个 Python 3 文件,编译器将会正确的解析它 (我意识到这样做可能会为 Python 2 和 3 的编译器带来许多繁重的工作,但是坦诚地说,维护一个统一的代码库永远都是件好事)。

如果我想让我基于 Python 2 的程序去使用一些属于 Python 3 的模块,我只需要确认这些模块在头部都有调用 import 。如果我想给我的模块发布一个可以在 Python 3 上运行的新版本,我只需要声明这个程序只在 Python 2.x 或更高版本中运行(使用新的 import 语句)。如果项目比较大,我甚至可以一次性地将版本升级到 3,留下旧代码,直到一些人来修正这些琐碎。最重要的,我可以升级到 Python 3 而不必等到所有的依赖都满足、直到有一个完整的方案时才来解决。

用户只有知道在不改变既有代码的情况下他们才会升级到 2.x 版本。开发者知道大家最终会升级到 2.x 所以他们放弃对之前版本的支持。但是既然 2.x 的代码在 3 下也兼容,那么他们就会开始编写和发布可以和未来兼容的代码,最终大部分的代码都将会在 Python 3 下工作,用户也会升级到 3 (2.x 将会对一些残余的代码给以警告)。最后我们可以丢掉对 2.x 的支持,然后让所有的代码都能得到更好的兼容。

这不是一个激进的点子,这是 Python 升级既有的方式。除非我们再次这样做,否则我不知道我们如何才能渡过这个艰难的阶段。


from: http://pycoders-weekly-chinese.readthedocs.io/en/latest/issue4/how-python3-should-have-worked.html


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
author-avatar
丧失Man
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有