原文地址: 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

如何过渡至 Python 3相关推荐

  1. 如何让图像过渡更自然 python_如何过渡至 Python 3

    如何过渡至 Python 3¶ 作为一个普通的 Python 开发者,不免会碰到 Python 2 到 3 转换不成功的问题.我经常会得到一些请求说要让我写的库能够在 Python 3 中运行,但是对 ...

  2. Python之父:Python 4.0可能不会来了

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器之心 编辑丨极市平台 导读 不要对 Python 4.0 ...

  3. 想自学Python却不知该如何入门?这篇文章带你轻松入门Python

    以2019年的资料为蓝本,2018年的资料为补充,还参考了一些网上的教程,旨在更好地总结Python基础知识,力求简明扼要,以供实战演练时能够快速查询遗忘的知识点.学一门语言贵在坚持用它,不用就淡忘了 ...

  4. python全栈简介_Python全栈(一)编程语言介绍

    一.编程语言介绍 程序是计算机能读懂的语言,是人和计算机沟通的方式. 计算机无法理解符号,只能理解0,1的二进制. 计算机内的运行状态就像灯泡的开关一样来表示各庄状态,两个灯泡能表示4种状态,无数的灯 ...

  5. 什么是 Python 的 「内存管理机制」?

    什么是内存管理器(what) Python作为一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存 ...

  6. Python源码怎么读,听听顶级爬虫工程师的建议

    图源来自Miguel Á. Padriñán 如何高效调试Python程序?Python内部的架构设计是怎样的?多业务类型的复杂系统中,Python语言的定位是? -- 以上问题,单从研究Python ...

  7. Python 3.8 即将到来,这是你需要关注的几大新特性

    Python 是一门广受好评的编程语言,每个版本的更新都会对开发社区带来一定影响.近日,Python 3.8 已进入 beta 2 版本的测试中,各项新特性已经添加完毕,最终版本预计于今年 10 月发 ...

  8. 三周写出高性能的Python代码,这些小技巧你值得一试。

    1一个不上进的 Python 使用者 我是一个有 C 语言背景的开发者.最近转做了 Python,平时用 Python 还算 6,这周在给新员工分享工作之后,有个小孩跑来问我:"哥,你是学 ...

  9. 由Python历史「解密」Python底层逻辑

    一次纯粹的hacking Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.尽管,他算得上是一位数学家,但他更加享受计算机 ...

最新文章

  1. Android多线程之ArrayBlockingQueue源码解析
  2. Nature最新封面:哺乳动物有「一键返老还童」按钮,复旦校友的这项研究恢复了老年小鼠视力...
  3. go语言查询某个值是否在数组中_Go语言数组详解
  4. get request uni 参数_uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装...
  5. string是线程安全的么_Java-21 多线程 - 是阿凯啊
  6. js脚本点击按钮显示文字_JSBOX脚本聊天神器
  7. 从ASP.NET Core 3.1中的当前URL获取主机信息
  8. 读写分离 mysql_详解MySQL实现主从复制过程及mycat读写分离步骤
  9. pandas创建series三种方法
  10. python learning2.py
  11. android获取mp3时间长,android 获取音频时长
  12. adams2020安装教程(附详细图文安装教程)
  13. 【BIM入门实战】Navisworks2018简体中文安装教程(附安装包下载)
  14. 华表 java_华表基础(转)
  15. 微信转账2020假图片_微信头像图片2020独一无二
  16. 结构光三维重建阶段性总结
  17. ISP模块之色彩增强算法--HSV空间Saturation通道调整
  18. Unet语义分割训练和TensorRT部署
  19. 【英语-同义词汇词组】advantage | ascendancy | predominance | preponderance | prepotency | superh的用法及区别
  20. unity 双指触控(以及多指触摸的代码原理分析)

热门文章

  1. 抽象类(abstract class)和接口(Interface)的区别
  2. 这位中国小伙 6个月用比特币攒了125个亿 !
  3. 信用卡葵花宝典笔记(一)
  4. MyBatis-20MyBatis高级结果映射【一对一映射(4种方式)】
  5. Centos显示-bash-4.1$问题的修复及原因探究
  6. 底部导航栏的几种实现方式
  7. android studio ide内部错误,Android Studio内部IDE错误
  8. matlab里矩阵相除,Matlab中的矩阵除法有问题???
  9. element ui点击按钮弹出款_前端猿应该知道的十大最流行的前端UI框架
  10. 学习笔记——使用下划线命名的规则