作者:empty 出版社:empty |
这种标记形式的一个用例是它允许纯Python函数完整模拟现有的用C代码编写的函数的行为。例如, 内另一个用例是在不需要形参名称时排除关键字参数、例如, 内置的len(1函数的签名为len(obj, /1,另一个益处是将形参标记为仅限位置形参将允许在未来修改形参名面不会破坏客户的代码.例如,在statistics模块中, 形参名dst在未来可能被修改。这使得以下函数描述成为可能:der quantiles di at, /, *, n-4, method-texoius1xet)由于在/左侧的形参不会被公开为可用关键字, 其他形参名仍可在**kwargs中使用:这极大地简化了需要接受任意关键字参数的函数和方法的实现, 例如, 以下是一段摘自collections新增的PYTHON PY CACHE PREFIX设置(也可使用-Xp y cache_prefix) 可将隐式的字节码缓存配置为使用单独的并行文件系统树, 而不是默认的每个源代码目录下的py cache_子目录。缓存的位置会在sys.py cache_prefix中报告(None表示默认位置即__py cache__子目录) .Python现在不论是以发布模式还是调试模式进行构建都将使用相同的ABI.在Unix上, 当Python以调试模式构建时, 现在将可以加载以发布模式构建的C扩展和使用稳定版ABI构建的C扩展。发布构建和调试构建现在都是ABI兼容的:定义Py_DEBUG宏不会再启用Py_TRACE_REFS宏, 它引人了唯一的ABI不兼容性.Py_TRACE_REFS宏添加了sys i get objects) 函数和PYTHON DUMP REFS环境变量, 它可以使用新的./configure--with-trace-refs构建选项来设置.(由Victor St inner在Unix上, C扩展不会再被链接到lib python, 但Android和Cygwin例外、现在静态链接的Python将可以加载使用共享库Python构建的C扩展.(Victor St inner在bpo:21536中贡献.)
在Unix上, 当Python以调试模式构建时, 导人操作现在也会查找在发布模式下编译的C扩展以及使用稳定版ABI编译的C扩展.(由Victor St inner在bpo-36722中贡献.)要将Python嵌人到个应用中, 必须将新增的—embed选项传给python 3-config--libs--embed以获得-Ipython 3.B(符应用链接到lib python) .要同时支持3.8和旧版本, 请先尝试Python 3-config--libs--embed并在此命令失败时回退到python 3-config--libs(即不带--embed) .增加个pkg-config python-3.8-embed模块用来将Python嵌人到一个应用中:pkg-configpython-3.8-embed--1ibs包含-1 python 3.8.要同时支持3.8和旧版本, 请先尝试pkg-configpython-X.Y-embed--libs并在此命令失败时回退到pkg-config python-X.Y--11bs(即不第Ded(请将X.¥菩换为Py than版本号) 。另一方面, pkg-config python 3.8--1ibs不再包含-1 python 3.8.C扩展不可被链接到lib python(但Android和Cygwin例外, 这两者的情况由脚本处理) ; 此改变是故意被设为向下不兼容的, (由VictorSt inner在bpo-36721中贡献。)2.5f-字符串支持=用于自动记录表达式和调试文档增加-说明符用于f-string, 形式为r'(expr-} '的f-字符串将扩展表示为表达式文本.加一个等于号,再加表达式的求值结果。例如:
2.9具有外部数据缓冲区的pickle协议5当使用pickle在Python进程间传输大量数据以充分发挥多核或多机处理的优势时, 非常重要一点是通过减少内存拷贝来优化传输效率,并可能应用一些定制技巧例如针对特定数据的压缩。pickle协议5引人了对于外部缓冲区的支持, 这样PEP 3118兼容的数据可以与主pickle流分开进行传输,这是由通信层来确定的。请参阅PEP 574了解详情。(由Antoine Pit rou在bpo-36785中贡献.)3其他语言特性修改·在之前版本中continue语句不允许在finally子句中使用, 这是因为具体实现有在一个问题。·bool.int和fractions.Fraction类型现在都有一个as_integer_ratio O方法.与在Python 3.8中此限制已被取消.(由Serhiy Storch aka在bpo-32489中贡献.)float和decimal.Decimal中的已有方法类似。这个微小的API扩展使得numerator,denominator=x.as_integer_ratio竹这样的写法在多种数字类型上通用成为可能.(由Lisa Roach在bpo-33073和Raymond Hettinger在bpo-37819中贡献.)·int, float和complex的构造器现在会使用__index__0特殊方法, 如果该方法可用面对应的方法method_int__0, _float_(或_complex__(方法不可用的话.(由Ser hi的万花520082中页献-f1oat(或_complex_() 方法不可用的话。(南SeyStorch aka在bpo-20092中贡献.)·添加 N{name} 转义符在正则表达式中的支持:
2.1赋值表达式.
2.2仅限位置形参.
2.3用于已编译字节码文件的井行文件系统媛存.
2.4调试构建使用与发布构理相同的ABI.
2.51字符申支持=用于自动记录表达式和调试文档
2.6PEP 578:Pythn运行时审核钩子.
2.7PEP 587:Pythn初始化配置.
2.8Vet r cal:用于CPythn的快递调用协议.
2.9具有外部数据缓冲区的pickle协议5.
3其他语言特性修改
4新增模块
5改进的模块
5.1ast.
5.2async i,
5.3builtins, .
54cllectins
5.5c Pr ile
5.6CSV
s1curses
5.8c types
5.9 datetime
5.10fune tls
5.11gc.
5.12 gettext.
5.13gzip
5.14IDLE与id lib
5.15 inspect.
5.16i.
5.17tertps
5.18jsn.tl.
5.19 lgging:
5.20math.
5.21mmap.
5.22 multiprcessing
5.23s,
5.24spath,
5.25pathlib,
5.26 pickle.
5.27phstlib.:
5.28pprit
5.29py_cmpile
5.30shlex.
5.31shutil.
5.32 scket.
5.33ssl.
5.34 statistics
5.35sys.
.36tarile
5.37 threading
5.38 tkenize
5.39 tkinter,
5.40 time.
5.41 typing.
5.42 unicde data
5.43 unittest,
5.44venv.
5.45weakrel
5.46xml
5.47xmlrpc.
6性能优化
7构建和CAPI的改变
8弃用
9API与特性的移除
10移植到Pythn 3.8
10.1 Pythn行为的改变,
10.史改的Pythn API.
10.3CAPI中的改变, ¥
10.4C Pythn字节码的改变
10.5演示和工具.
11 Pythn 3.8.1中的重要变化
12 Ntable changes in Pythn 3.8.2