|
编译器现在生成一个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 DeprecationWarning。doctype()在目标上定义用于处理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()。
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|