首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有人说python3在毁灭python,具体更新了什么

新的语法功能:

PEP 498,格式化字符串文字。

PEP 515,以数字文字强调。

PEP 526,变量注释的语法。

PEP 525,异步发电机。

PEP 530:异步解析。

新的图书馆模块:

秘密:PEP 506 - 将秘密模块添加到标准库。

CPython实现改进:

基于Raymond Hettinger的建议和类似于PyPy dict的实现,dict类型已被重新实现以使用更紧凑的表示。与Python 3.5相比,这导致字典使用的内存减少了20%到25%。

新协议简化了类创建的自定义。

类属性定义顺序现在保留。

** kwargs中元素的顺序现在对应于将关键字参数传递给函数的顺序。

DTrace和SystemTap探测支持已添加。

新的PYTHONMALLOC环境变量现在可以用来调试解释器内存分配和访问错误。

标准库的重大改进:

asyncio模块已经获得了新功能,显着的可用性和性能改进以及相当数量的错误修复。从Python 3.6开始,asyncio模块不再是临时的,它的API被认为是稳定的。

已经实现了一种新的文件系统路径协议来支持路径类对象。所有在路径上运行的标准库函数都已更新,可与新协议一起使用。

日期时间模块已获得本地时间消除歧义的支持。

打字模块获得了许多改进。

tracemalloc模块已经过重大修改,现在用于为ResourceWarning提供更好的输出,并为内存分配错误提供更好的诊断。有关更多信息,请参阅PYTHONMALLOC部分。

安全改进:

添加了新的秘密模块以简化适合于管理秘密的密码强的伪随机数的生成,例如账户认证,令牌和类似的。

在Linux上,os.urandom()现在会阻塞,直到系统随机熵池初始化以提高安全性。请参阅PEP 524的基本原理。

hashlib和ssl模块现在支持OpenSSL 1.1.0。

ssl模块的默认设置和功能集已得到改进。

hashlib模块获得了对BLAKE2,SHA-3和SHAKE哈希算法以及scrypt()密钥导出函数的支持。

Windows改进:

PEP 528和PEP 529,Windows文件系统和控制台编码更改为UTF-8。

当用户没有指定版本(通过命令行参数或配置文件)时,py.exe启动器在交互使用时不再偏爱Python 2而不是Python 3。处理shebang行保持不变 - “python”在这种情况下指的是Python 2。

python.exe和pythonw.exe已被标记为长路径感知,这意味着260个字符的路径限制可能不再适用。有关详细信息,请参阅删除MAX_PATH限制。

可以添加._pth文件来强制隔离模式,并完全指定所有搜索路径以避免注册表和环境查找。有关更多信息,请参阅文档。

python36.zip文件现在可以作为推断PYTHONHOME的里程碑。有关更多信息,请参阅文档。

新功能

PEP 498:格式化字符串文字

PEP 498引入了一种新的字符串文字:f-字符串或格式化的字符串文字。

带格式的字符串文字前缀为'f',与str.format()接受的格式字符串相似。它们包含由花括号包围的替换区域。替换字段是表达式,在运行时进行评估,然后使用format()协议进行格式化:

小编为大家推荐一个学习交流群:708214004,群里有人都快满了~大家遇到啥问题都可以在里面交流!是一个非常好的学习交流地方~欲进从速欧~各种PDF等你来下载,全部免费,只

为帮助大家快速入门。

PEP 526:变量注释的语法

PEP 484引入了功能参数类型注释的标准,即类型提示。 此PEP为Python添加语法,用于注释包括类变量和实例变量的变量类型:

就像函数注释一样,Python解释器没有给变量注释附加任何特定的含义,只将它们存储在类或模块的__annotations__属性中。

与静态类型语言中的变量声明相比,注释语法的目标是通过抽象语法树和__annotations__属性为第三方工具和库指定结构化类型元数据提供了一种简便的方法。

PEP 515:数字文字中的下划线

PEP 515增加了在数字文字中使用下划线的能力,以提高可读性。 例如:

在数字之间和任何基本说明符之后允许单下划线。 不允许在一行中使用前导符,后缀符或多个下划线。

字符串格式化语言现在还支持'_'选项,以表示用于浮点表示类型和整数表示类型'd'的千位分隔符的下划线的使用。 对于整数表示类型“b”,“o”,“x”和“X”,下划线将每4位插入一次:

PEP 525:异步发电机

PEP 492引入了对Python 3.5的本地协程和异步/等待语法的支持。 Python 3.5实现的一个显着限制是不可能在同一个函数体中使用await和yield。 在Python 3.6中,这个限制已经被取消,使得定义异步生成器成为可能:

新的语法允许更快,更简洁的代码。

PEP 530:异步理解

PEP 530增加了在列表,设置,词典理解和生成器表达式中使用异步的支持:

此外,各种理解都支持await表达式:

PEP 487:更简单的创建类的定制

现在可以在不使用元类的情况下自定义子类创建。 每当创建新的子类时,将在基类上调用新的__init_subclass__类方法:

为了允许零参数super()调用从__init_subclass __()实现中正常工作,自定义元类必须确保新的__classcell__名称空间条目被传播到.__ new__类型(如创建类对象中所述)。

PEP 487:描述符协议增强

PEP 487扩展了描述符协议以包含新的可选__set_name __()方法。 每当定义一个新类时,将在定义中包含的所有描述符上调用新方法,为它们提供对定义类的引用以及在类名称空间内给描述符的名称。 换句话说,描述符的实例现在可以知道所有者类中描述符的属性名称:

PEP 519:添加文件系统路径协议

文件系统路径在历史上被表示为str或字节对象。这导致编写在文件系统路径上运行的代码的人认为这些对象只是这两种类型中的一种(表示文件描述符的int不算作文件路径)。不幸的是,这种假设阻止了像pathlib这样的文件系统路径的替代对象表示与预先存在的代码(包括Python的标准库)一起工作。

为了解决这种情况,已经定义了由os.PathLike表示的新接口。通过实现__fspath __()方法,一个对象表示它代表一条路径。然后,对象可以将文件系统路径的低级表示形式作为str或bytes对象提供。这意味着如果一个对象实现os.PathLike或者是表示文件系统路径的str或bytes对象,则该对象被认为是类路径的。代码可以使用os.fspath(),os.fsdecode()或os.fsencode()来显式获取类路径对象的str和/或字节表示。

内置的open()函数已被更新为接受os.PathLike对象,os和os.path模块中的所有相关函数以及标准库中的大多数其他函数和类。 os.DirEntry类和pathlib中的相关类也已更新,以实现os.PathLike。

希望更新在文件系统路径上运行的基本功能将导致第三方代码隐式支持所有类似于路径的对象,而无需更改任何代码,或者至少是非常小的对象(例如,调用os.fspath()在类路径对象上运行之前的代码开始)。

下面是一些新界面如何允许使用预先存在的代码更容易和透明地使用pathlib.Path的示例:

PEP 495:当地时间消歧

在世界大部分地区,本地时钟已经和将要被移回。 在那些时间里,介绍了当地时钟在同一天显示两次同一时间的间隔。 在这些情况下,显示在本地时钟上(或存储在Python日期时间实例中)的信息不足以识别特定时刻。

PEP 495将新的fold属性添加到datetime.datetime和datetime.time类的实例中,以区分当地时间相同的两个时刻:

对于所有实例,fold属性的值都为0,除了那些代表含糊不清情况下的第二个(按时间顺序排列)的时刻的值。

PEP 529:将Windows文件系统编码更改为UTF-8

表示文件系统路径最好使用str(Unicode)而不是字节来执行。 但是,在某些情况下使用字节是充分和正确的。

在Python 3.6之前,在Windows上使用字节路径时可能导致数据丢失。 通过这种更改,现在在Windows上支持使用字节表示路径,前提是这些字节使用由sys.getfilesystemencoding()返回的编码进行编码,现在默认为'utf-8'。

不使用str来表示路径的应用程序应该使用os.fsencode()和os.fsdecode()来确保它们的字节被正确编码。 要恢复到以前的行为,请设置PYTHONLEGACYWINDOWSFSENCODING或调用sys._enablelegacywindowsfsencoding()。

PEP 528:将Windows控制台编码更改为UTF-8

Windows上的默认控制台现在将接受所有Unicode字符,并向Python代码提供正确读取的str对象。 sys.stdin,sys.stdout和sys.stderr现在默认为utf-8编码。

此更改仅适用于使用交互式控制台时,而不适用于重定向文件或管道时。 要恢复交互式控制台使用的先前行为,请设置PYTHONLEGACYWINDOWSSTDIO。

PEP 520:保留类属性定义顺序

类定义主体中的属性具有自然顺序:名称出现在源中的顺序相同。 这个顺序现在保存在新类的__dict__属性中。

而且,有效的默认类执行命名空间(从类型.__ prepare __()返回)现在是插入顺序保留映射。

PEP 468:保留关键字参数顺序

**函数签名中的kwargs现在可以保证为插入顺序保留映射。

新的字典实施

字典类型现在使用基于由Raymond Hettinger提议的“紧凑”表示,该建议最初由PyPy实施。与Python 3.5相比,新dict()的内存使用量减少了20%到25%。

这个新实现的顺序保留方面被认为是一个实现细节,不应该被依赖(这可能会在将来发生变化,但是希望在改变语言规范之前在几种版本中使用这种新的dict实现语言为所有当前和将来的Python实现强制实现顺序保留语义;这也有助于保持随机迭代顺序仍然有效的老版本语言(例如Python 3.5)的向后兼容性。

(INADA Naoki在bpo-27350提供,最初由Raymond Hettinger提出的想法。)

PEP 523:将框架评估API添加到CPython

虽然Python提供了广泛的支持来定制代码的执行方式,但尚未完成的一个地方是评估框架对象。如果你想以某种方式在Python中拦截框架评估,那么如果不直接操作定义函数的函数指针,那么实在没有办法。

PEP 523通过提供一个API来在C级别上进行帧评估插件的改变。这将允许诸如调试器和JIT之类的工具在开始执行Python代码之前拦截帧评估。这可以使用Python代码的替代评估实现,跟踪框架评估等。

此API不是有限C API的一部分,并且被标记为私有信号,表示此API的使用预计会受到限制,并且仅适用于非常精选的低级用例。必要时,API的语义将随Python而改变。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180315A1HJEA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券