python3.7界面翻译_[译] Python 3.7 新特性

Python 3.7 新特性版本:3.7.0a1

日期:2017年9月27日

本文阐述了Python 3.7所具有的新特性(与3.6版本对比)。

注意: 预发布版本的用户要留意,本文档目前还属于草案。随着Python 3.7的发布,后续将会有很显著的更新,所以即使阅读过早期版本,也值得再回来看看。

版本亮点总结

新特性

PEP 538:遗留的C语言本地化编码自动强制转换问题

在 Python 3 系列版本中,确定一个合理的默认策略来处理当前位于非 Windows 平台上默认C语言本地化编码隐式采用的“7位 ASCII”,是个永不停歇的挑战。

LC_CTYPE 意味着核心解释器和关于本地化识别的C语言扩展(如

作为变化的一部分,当使用任一强制转换的已定义目标编码(当前为 C.UTF-8,C.utf8 和 UTF-8),stdin 及 stdout 的默认错误处理器现在为 surrogateescape(而不是 strict);而 stderr 的默认错误处理器仍然是 backslashreplace,与语言环境无关。

默认的本地化编码强制转换是隐式的,但是为了能帮助调试潜在的与本地化相关的集成问题,可以通过设置 PYTHONCOERCECLOCALE=warn 来请求直接用 stderr 发出明确的警告。当核心解释器初始化时,如果遗留的C语言本地化编码仍是活动状态,那么该设置会导致 Python 运行时发出警告。

另见:

PEP 由 Nick Coghlan 撰写及实施。

其他的语言更新现在传递给某个函数的参数( argument )可以超过255个,且一个函数的形参( parameter )可以超过255个。(由 Serhiy Storchaka 参与贡献的 bpo-12844 和 bpo-18896。)

bpo-28927。)

现在当 from ... import ... 失败的时候,__file__ 路径。(由 Matthias Bussonnier 参与贡献的 bpo-29546。)

现在已支持将包含绝对 imports 的循环 imports 通过名称绑定到一个子模块上。(由 Serhiy Storchaka 参与贡献的 bpo-30024。)

现在,object.__format__(x,'') 等价于 str(x) ,而不是 format(str(self),'')。(由 Serhiy Storchaka 参与贡献的 bpo-28974。)

新模块暂无。

改进的模块

argparse

在大多数的 unix 命令中,bpo-14191。)

binascii

backtick 关键字参数,当它的值为 true 时,所有的“0”都将被替换为 '`' 而非空格。(由 Xiang Zhang 参与贡献的 bpo-30103。)

calendar

bpo-30095。)

cgi

FieldStorage 会返回同样的结果:对于非文件字段,与键相关联的值是一个字符串列表,而非字节。(由 Pierre Quentel 参与贡献的 bpo-29979。)

contextlib

dis

bpo-11822。)

distutils

README.rst 现已包含在 distutils 的标准自述文件列表中,进而它也分别包含在各源码中。(由 Ryan Gonzalez 参与贡献的 bpo-11913。)

http.server

bpo-29654。)

在 directory 参数,在命令行的 --directory。有了这个参数,服务器将会运行在指定目录下,默认使用当前工作目录。(由 Stéphane Wirtel and Julien Palard 参与贡献的 bpo-28707。)

locale

在 format_string() 方法中添加了另一个参数 monetary 。如果 monetary 的值为 true,会转换为使用货币千位分隔符和分组字符串。(由 Garvit 参与贡献的 bpo-10379。)

math

新的 bpo-29962。)

os

增加了对 bpo-28682。) (Contributed by Serhiy Storchaka in bpo-28682.)

在Unix平台上,增加了对 file descriptors 的支持。(由 Serhiy Storchaka 参与贡献的 bpo-25996。)

新的 bpo-16500。)

pdb

header 强制关键字参数。如果已给出,它将会在调试开始前打印至控制台。

string

bpo-1198569。)

unittest.mock

bpo-20804。)

xmlrpc.server

xmlrpc.server.SimpleXMLRPCDispatcher 的 register_function() 及其子类能被用作装饰器。(由 Xiang Zhang 参与贡献的 bpo-7769。)

unicodedata

内部的 Unicode 10。 (由 Benjamin Peterson 参与贡献。)

urllib.parse

~ 添加到默认情况下从不引用的字符集中。(由 Christian Theune 和 Ratnadeep Debnath 参与贡献的 bpo-16285。)

uu

函数 backtick ,当它的值为 true 时,“0”会被 '`' 替代而非空格。(由 Xiang Zhang 参与贡献的 bpo-30103。)

zipapp

函数 zipapp.create_archive() 现在能接受一个可选的参数 filter,来允许用户选择哪些文件应该被包含在存档中。

优化添加了两个新的操作码:LOAD_METHOD 及 CALL_METHOD,从而避免为了方法调用的绑定方法对象的实例化,这将导致方法调用的速度提升20%。(由 Yury Selivanov 及 INADA Naoki 参与贡献的 bpo-26110。)

当在一字符串内查找某些特殊的 Unicode 字符(如乌克兰大写字母 “Є”)时,将会比查找其他字符慢25倍,但现在最差情况下也只慢了3倍。(由 Serhiy Storchaka 参与贡献的 bpo-24821。)

标准C语言库的快速执行现在能用于 bpo-26121。)

由于使用了 bpo-25996。)

优化了对于大小写忽略的匹配及对于 bpo-30285。)

在较重负荷下,selectors.EpollSelector.modify(),selectors.PollSelector.modify() 及 selectors.DevpollSelector.modify() 将比原来快10%左右。(由 Giampaolo Rodola’ 参与贡献的 bpo-30014。)

编译生成及C语言API的更改在非OSX、UNIX平台上,当构建 _ctypes 时需要已安装的 libffi 副本。(由 Zachary Ware 参与贡献的 bpo-27979。)

结构 wrapperbase 的 name 和 doc字段的类型现在为 const char * 而非 char *。(由 Serhiy Storchaka 参与参与贡献的 bpo-28761。)

const char * 而非 char *。(由 Serhiy Storchaka 参与贡献的 bpo-28769。)

Windows 构建进程不再依赖 Subversion 来 pull 外部资源,而是通过使用 Python 脚本从 Github 下载 zip 文件。如果系统未安装 Python 3.6(通过命令 py -3.6),将会使用 NuGet 来下载 32位的 Python 副本。(由 Zachary Ware 参与贡献的 bpo-30450。)

移除了对于构建 --without-threads 的支持。(由 Antoine Pitrou 参与贡献的 bpo-31370。)

其他 CPython 实现的更改在被追踪的框架上,通过将新的 f_trace_lines 属性设置为 line 事件。(由 Nick Coghlan 参与贡献的 bpo-31344。)

在被追踪的框架上,通过将新的 f_trace_opcodes 属性设置为 opcode 事件。(由 Nick Coghlan 参与贡献的 bpo-31344。)

弃用的内容如果未设置 Py_LIMITED_API ,或其被设置为从 0x03050400 到 0x03060000 (不含)的值或不小于 0x03060100 的值,将弃用函数 bpo-27867。)

用 format_string() 来替代 bpo-10379。)

在 bpo-28692。)

C语言API的更改PyThread_start_new_thread() 和 PyThread_get_thread_ident() 返回结果的类型, 及 id 的类型从 long 变为 unsigned long。(由 Serhiy Storchaka 参与贡献的 bpo-6532。)

如果 NULL 且 wchar_t* 字符串包含空字符,就会引起一个 bpo-30708。)

仅Windows平台Python 启动器(py.exe)能接收32及64位说明符,且无需指定次要版本。所以 py -3-32 与 py -3-64 也会和 py -3.7-32 一样有效,并且现在能接受 -m-64 与 -m.n-64 来强制使用64位 Python,即使32位在使用中也是如此。如果指定版本不可用,py.exe将会报错退出。(由 Steve Barnes 参与贡献的 bpo-30291。)

启动器可以通过命令 “py -0” 运行,生成已安装 Python 的版本列表,标有星号的是为默认,运行 “py -0p” 将包含安装路径。如果 py 使用无法匹配的版本说明符运行,也会打印缩略形式的可用说明符列表。(由 Steve Barnes 参与贡献的 bpo-30362。)

移除的内容

移除的API及特性在使用 '\' 及一个 ASCII 字母组成的未知转义符已在 Python 3.5 中被弃用,现在使用将会报错。

移除了 exclude 。它已在 Python 2.7 和 3.2 版本被弃用,取而代之的是使用实参 filter。

ntpath 模块中的 splitunc() 函数在 Python 3.1 被弃用,现在已被移除。使用

verbose 参数和 _source 属性,该属性用于显示为已命名元组类所生成的源码。这是用来提升类创建速度的优化设计的一部分。(由 Jelle Zijlstra 贡献并由 INADA Naoki,Serhiy Storchaka,和 Raymond Hettinger 进一步完善的 bpo-28638。)

函数

移除了先前在 Python 2.4 版本已被弃用的在 Plist,Dict 和 _InternalDict。函数

移植到 Python 3.7

本小节列出了之前描述的一些更改,以及一些其他bug修复,因而你可能需要对你的代码进行更改。

Python API的更改如果 path 是一个字符串,bpo-24744。)

positional-only,将它作为关键字参数传递已在 Python 3.5 时被弃用。(由 Serhiy Storchaka 参与贡献的 bpo-29193。)

bpo-29192。)

Module,FunctionDef,AsyncFunctionDef 及 ClassDef AST 节点现在新增了一个 docstring 字段,它们自身的首次声明不再被当做是一个 docstring。类和模块的代码对象 co_firstlineno 及 co_lnotab 会因这个更改而受到影响。(由 INADA Naoki and Eugene Toder 参与贡献的 bpo-29463。)

mode 不再影响新建的中级目录的文件权限位,要想设置它们的文件权限位,你可以在调用 makedirs() 之前设置 umask。(由 Serhiy Storchaka 参与贡献的 bpo-19930。)

由于

repr 已变为在输出中包含关键字参数。(由 Utkarsh Upadhyay 参与贡献的 bpo-30302。)

CPython 字节码的更改增加了两个新的操作码:bpo-26110。)掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、React、前端、后端、产品、设计 等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值