Python3.8更新笔记
-
3.8beta版本已经可供下载,简单归纳以下几点功能供参考
-
海象运算符
- 形如
:=
的运算符,一般和while
及if
语句搭配使用,可以在对变量进行判断的同时对其赋值
m = re.match(p1, line) if m: return m.group(1) else: m = re.match(p2, line) if m: return m.group(2) else: ... # 可简写为 if m := re.match(p1, line): return m.group(1) elif m := re.match(p2, line): return m.group(2) ... # 不可迭代对象 ent = obj.next_entry() while ent: ... # ent代码 ent = obj.next_entry() # 可简写为 while ent := obj.next_entry(): ... # ent代码
- 形如
-
f - string支持调试
- 增加附加语法,以便于调试中对输出进行优化
# 1. 3.6版本 print(f'foo={foo}') # 可简化为 print(f'{foo=}') # 2. "!s"使结果以字符串形式输出,以替代默认的 repr() 类型 from datetime import datetime now = datetime.now() print(f'{now=}') # now=datetime.datetime(2019, 7, 21, 15, 02, 0, 476923) print(f'{now=!s}') # now=2019-07-21 15:02:00.476923 # “!f” 能够对输出的格式进行调整 import math print(f'{math.pi=!f:.2f}') # math.pi=3.14 a = 37 print(f'{a = }, {a = }') # a = 37, a = 37 注意空格表达方式 # 3. PEP 570 中提出了一种表示 positional-only 参数的新语法,用于表示不能作为关键字参数进行传递的参数;其使用类似于“*”,PEP 3102 中提出“*”用于表示关键字参数 def bar(a, b, /, c, d, *, e, f): ... # a, b 为必须位置参数,e, f 必须为关键字参数,c, d 都两种都可以 bar(1, 2, 3, 4, e=5, f=6) # 正确 bar(1, 2, 3, d=4, e=5, f=6) # 正确 bar(a=1, b=2, c=3, d=4, e=5, f=6) # 错误
-
可移动的__pycache__
- 从3.2版本开始,Python3解释器创建
__pycache__
文件夹保存.pyc
文件,这是为了支持多版本Python,如PyPy(不是CPython) - 新增环境变量
PYTHONPYCACHEPREFIX
,告诉Python何处查找和存储这些缓存文件
# 指定__pycache__文件路径 -X pycache_prefix=PATH
- 从3.2版本开始,Python3解释器创建
-
- 更快捷的C拓展调用方式
- 清除解释器中配置处理
- 标准库模型更新