加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Python 3.8 新特性全面解读

发布时间:2019-04-02 20:18:13 所属栏目:优化 来源:佚名
导读:副标题#e# 本文详细介绍 Python 3.8 中的新功能,以及和与 3.7 相比的一些不同点。 新功能 编译的字节码文件的并行文件系统缓存新的 PYTHONPYCACHEPREFIX设置 (也可用 )将隐式字节码缓存配置为使用单独的并行文件系统树,而不是每个源目录中的默认子目录

编译器现在生成一个SyntaxWarning何时身份检查 与某些类型的文字(例如字符串,整数)一起使用。这些通常可以在CPython中偶然使用,但不受语言规范的保证。警告建议用户使用相等测试。

Python API的变化
  • 该函数platform.popen()已被删除,自Python 3.3以来已被弃用:os.popen()改为使用。

  • statistics.mode()给定多模态数据时,该函数不再引发异常。相反,它返回输入数据中遇到的第一个模式。
    该类的selection()方法 tkinter.ttk.Treeview不再需要参数。在Python 3.6中不推荐使用带有参数来更改选择。使用专门的方法,如selection_set()更改选择。

  • writexml(),toxml()并且toprettyxml()所述的方法 xml.dom.minidom模块,和xml.etree现在保存由用户指定的属性顺序。(
    -dbm.dumb使用flags打开的数据库'r'现在是只读的。 dbm.dumb.open()带有标志'r','w'如果不存在则不再创建数据库。

  • 将不再调用doctype()子类中定义的方法, XMLParser并且将导致发出a RuntimeWarning而不是a DeprecationWarningdoctype()在目标上定义用于处理XML doctype声明的方法。

  • 一个RuntimeError是现在时引发自定义的元类不提供classcell__传入的名称空间项 type.__new。A DeprecationWarning是在Python 3.6-3.7中发出的。

  • 在cProfile.Profile类现在可以作为一个上下文管理器。

  • shutil.copyfile()shutil.copy()shutil.copy2(), shutil.copytree()shutil.move()使用特定于平台的“快速复制”的系统调用

  • shutil.copyfile()Windows上的默认缓冲区大小从16 KiB更改为1 MiB。

  • PyGC_Head结构完全改变了。触及struct成员的所有代码都应该被重写。

  • PyInterpreterState结构已被移入“内部”头文件(特别是Include / internal / pycore_pystate.h)。opaque PyInterpreterState仍然可用作公共API(和稳定的ABI)的一部分。文档表明struct的字段都不公开,所以我们希望没有人使用它们。但是,如果您确实依赖于一个或多个私有字段而没有其他选择,那么请打开一个BPO问题。我们将努力帮助您进行调整(可能包括向公共API添加访问器功能)。

  • ASYNCIO任务现在可以命名,或者通过将name关键字参数asyncio.create_task()或create_task()事件循环的方法,或者通过调用set_name()任务对象的方法。任务名称在repr()输出中可见,asyncio.Task也可以使用该get_name()方法检索。

  • mmap.flush()方法现在返回None成功并在所有平台下引发错误异常。以前,它的行为是平台依赖的:成功时返回非零值; 在Windows下错误返回零。成功返回零值; 在Unix下出现异常错误。

  • 该函数math.factorial()不再接受非int类的参数。

  • xml.dom.minidom和xml.sax模块默认不再处理外部实体。

  • 从只读dbm数据库(dbm.dumb, dbm.gnu或dbm.ndbm)中删除密钥会引发error(dbm.dumb.error, dbm.gnu.error或dbm.ndbm.error)而不是KeyError。

  • expanduser()在Windows上现在更喜欢 USERPROFILE 环境变量,不使用 HOME,通常不为常规用户帐户设置。

使用#在分析或建筑价值的形式变体(例如 PyArg_ParseTuple(),Py_BuildValue()PyObject_CallFunction()没有等)PY_SSIZE_T_CLEAN定义提出了DeprecationWarning现在。它将在3.10或4.0中删除。阅读解析参数并为细节构建值。(由Inada Naoki在bpo-36381供稿。)

C API的变化

-堆分配类型的实例(例如用其创建的实例 PyType_FromSpec())保存对其类型对象的引用。增加这些类型对象的引用计数已从 PyType_GenericAlloc()更低级别的函数移动, PyObject_Init()并且PyObject_INIT()。这使得通过PyType_FromSpec()托管代码中的其他类行为创建类型。

静态分配的类型不受影响。

对于绝大多数情况,应该没有副作用。但是,在分配实例(可能是为了解决bug)之后手动增加引用计数的类型现在可能变得不朽。为避免这种情况,这些类需要在实例释放期间在类型对象上调用Py_DECREF

要将这些类型正确移植到3.8,请应用以下更改:

Py_INCREF分配实例后删除类型对象 - 如果有的话。这可能打完电话后发生的PyObject_New(), PyObject_NewVar()PyObject_GC_New(), PyObject_GC_NewVar(),或使用任何其他自定义分配器 PyObject_Init()PyObject_INIT()

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读