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

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

发布时间:2019-10-25 17:50:12 所属栏目:建站 来源:杨鲤萍
导读:本文转自雷锋网,如需转载请至雷锋网官网申请授权。 距 Python 3.8 不变版正式宣布已经已往了小半个月,不少 Python 常驻用户已经将 Python 更新到了 3.8 版本,也有一些伴侣担忧代码运行兼容性等题目,依然坚挺在 Python3.7 中。 那么,毕竟要不要更新到

人们保举的名字,好比'assignment operator'、'named expression operator'、'becomes operator'等等,而不是像 walrus operator 这样的行话,会导致夹杂。

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

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

关于 walrus 运算符的争论

关于 walrus 运算符的具体先容就是这些,除此之外,Python3.8 也有其余新成果——

仅位置参数(Positional-Only Arguments)

这是新增的一个函数形参语法,用来指明某些函数形参必需行使仅限位置而非要害字参数的情势。这种标志语法与通过 help() 所表现的行使 Larry Hastings 的 Argument Clinic 器材标志的 C 函数沟通。

在下面的例子中,形参 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 流分隔举办传输,这是由通讯层来确定的。

(编辑:湖南网)

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

热点阅读