加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python 3.8 究竟要不要升级?用过之后的小哥这样说

发布时间:2019-10-28 07:45:03 所属栏目:建站 来源:杨鲤萍
导读:副标题#e# 本文转自雷锋网,如需转载请至雷锋网官网申请授权。 距 Python 3.8 稳定版正式发布已经过去了小半个月,不少 Python 常驻用户已经将 Python 更新到了 3.8 版本,也有一些朋友担心代码运行兼容性等问题,依然坚挺在 Python3.7 中。 那么,究竟要不

在下面的例子中,形参 a 和 b 为仅限位置形参,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参:

  1. def f(a, b, /, c, d, *, e, f): 
  2.  
  3.  print(a, b, c, d, e, f) 

以下均为合法的调用:

  1. f(10, 20, 30, d=40, e=50, f=60) 

但是,以下均为不合法的调用:

  1. f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argument 
  2.  
  3. f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument 

这种标记形式的一个用例是它允许纯 Python 函数完整模拟现有的用 C 代码编写的函数的行为。另一个用例是在不需要形参名称时排除关键字参数。例如,内置的 len() 函数的签名为 len(obj, /)。

除了这一点,在 Python3.8 中,可以用 / 来表示必须通过仅位置参数之前的参数。这极大地方便了之前在自定义函数中,开发者没有简单的方法指定参数为仅位置参数的问题。

  1. def incr(x, /): 
  2.  
  3. return x + 1 

更多关于仅位置参数:https://www.python.org/dev/peps/pep-0570/

用于已编译字节码文件的并行文件系统缓存

新增的 PYTHONPYCACHEPREFIX 设置 (也可使用 -X pycache_prefix) 可将隐式的字节码缓存配置为使用单独的并行文件系统树,而不是默认的每个源代码目录下的 __pycache__ 子目录。

缓存的位置会在 sys.pycache_prefix 中报告 (None 表示默认位置即 __pycache__ 子目录)。

更详细内容:https://bugs.python.org/issue33499

调试构建使用与发布构建相同的 ABI

不管是在发布模式还是调试模式下构建,Python 现在都使用相同的 ABI。在   Unix 上,当 Python 以调试模式构建时,现在可以加载以发布模式构建的 C  扩展和使用稳定 ABI 构建的 C 扩展

更详细内容:https://bugs.python.org/issue36721

f 字符串支持一个方便的 = 说明符进行调试

=在 f-string 中添加了一个说明符。f 字符串(例如)f'{expr=}' 将扩展为表达式的文本、等号,然后扩展为求值表达式的表示形式。

更详细内容:https://bugs.python.org/issue36817

PEP 587:Python 初始化配置

在 PEP 587 添加了新的 C API 以配置 Python 初始化,从而提供了对整个配置的更好控制和更好的错误报告。

新的结构:

  • PyConfig

  • PyPreConfig

  • PyStatus

  • PyWideStringList

新的函数:

  • PyConfig_Clear()

  • PyConfig_InitIsolatedConfig()

  • PyConfig_InitPythonConfig()

  • PyConfig_Read()

  • PyConfig_SetArgv()

  • PyConfig_SetBytesArgv()

  • PyConfig_SetBytesString()

  • PyConfig_SetString()

  • PyPreConfig_InitIsolatedConfig()

  • PyPreConfig_InitPythonConfig()

  • PyStatus_Error()

  • PyStatus_Exception()

  • PyStatus_Exit()

  • PyStatus_IsError()

  • PyStatus_IsExit()

  • PyStatus_NoMemory()

  • PyStatus_Ok()

  • PyWideStringList_Append()

  • PyWideStringList_Insert()

  • Py_BytesMain()

  • Py_ExitStatusException()

  • Py_InitializeFromConfig()

  • Py_PreInitialize()

  • Py_PreInitializeFromArgs()

  • Py_PreInitializeFromBytesArgs()

  • Py_RunMain()

更详细内容:https://www.python.org/dev/peps/pep-0587/

Vectorcall: 用于 CPython 的快速调用协议

添加 "vectorcall" 协议到 Python/C API。它的目标是对已被应用于许多类的现有优化进行正式化。任何实现可调用对象的扩展类型均可使用此协议。

更详细内容:https://www.python.org/dev/peps/pep-0590/

具有外部数据缓冲区的 pickle 协议 5

当使用 pickle 在 Python 进程间传输大量数据以充分发挥多核或多机处理的优势时,非常重要一点是通过减少内存拷贝来优化传输效率,并可能应用一些定制技巧例如针对特定数据的压缩。

pickle 协议 5 引入了对于外部缓冲区的支持,这样 PEP 3118 兼容的数据可以与主 pickle 流分开进行传输,这是由通信层来确定的。

(编辑:西安站长网)

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

热点阅读