Backto Python Index
Python3 版本追踪
Release 3.8 @ 2019-10-14
- 新增
海象运算法 :=
, 实现 表达式内部为变量赋值, 防止同一表达式连续调用两次。适用于 第一次判断,第二次处理的场景
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
- csv.DictReader 现在将返回 dict 而不是 collections.OrderedDict。 此工具现在会更快速且消耗更少内存同时仍然保留字段顺序。
- datetime: 添加了新的替代构造器 datetime.date.fromisocalendar() 和 datetime.datetime.fromisocalendar(),它们分别基于 ISO 年份、周序号和周内日序号来构造 date 和 datetime 对象;这两者分别是其所对应类中 isocalendar 方法的逆操作。
- os.path:返回布尔值结果的 os.path 函数例如 exists(), lexists(), isdir(), isfile(), islink(), 以及 ismount() 现在对于包含在 OS 层级无法表示的字符或字节的路径将会返回 False 而不是引发 ValueError 或其子类 UnicodeEncodeError 和 UnicodeDecodeError。
Python2 版本追踪
Release 2.7.18 @ 2020-04-24
The last release of Python2
History 历史因缘
常见不同
2.x | 3.x | 备注 |
---|---|---|
print xxx | print(xxx) | |
xrange | range | |
import xxx | import .xxx | |
3/2==1 | 3/2==1.5 | in 3.x, 3//2 = 1 |
raise ValueError, “dodgy value” | raise ValueError(“dodgy value”) | |
except ValueError, e: | except ValueError as e: | |
bigint = 1L | bigint = 1 | Short integers are gone in Python 3 and long has become int (without the trailing L in the repr |
`x` | repr(x) | Return the canonical string representation of the object. For many object types, including most builtins, eval(repr(obj)) == obj. |
porting 2.x to 3.x
绝对不是把 bug fix 之后就可以的(naive 啊),因为有很多隐性的不同,导致结果离奇出错。
Porting Python 2 Code to Python 3
是个系统工程,具体思路看 Brett Cannon 的 blog.。- 简单的代码翻译 2.x to 3.x, 使用官方工具 2to3.py, 教程