用 Python 3.8 中的这个位置技巧让你的 API 变得更好

探索只接受位置参数和其他两个未被充分利用但仍然有用的 Python 特性。

探索只接受位置参数和其他两个未被充分利用但仍然有用的 Python 特性。

用 Python 3.8 中的这个位置技巧让你的 API 变得更好

这是 Python 3.x 首发特性系列文章的第九篇。Python 3.8 于 2019 年首次发布,两年后,它的许多很酷的新特性仍然没有被使用。下面是其中的三个。

importlib.metadata

入口点 在 Python 包中被用来做各种事情。大多数人熟悉的是 console_scripts 入口点,不过 Python 中的许多插件系统都使用它们。

在 Python 3.8 之前,从 Python 中读取入口点的最好方法是使用 pkg_resources,这是一个有点笨重的模块,它是 setuptools 的一部分。

新的 importlib.metadata 是一个内置模块,它允许访问同样的东西:

“`
from importlib import metadata as importlib_metadata

distribution = importlibmetadata.distribution(“numpy”)
distribution.entry
points

“`

“`
[EntryPoint(name=’f2py’, value=’numpy.f2py.f2py2e:main’, group=’consolescripts’),
EntryPoint(name=’f2py3′, value=’numpy.f2py.f2py2e:main’, group=’console
scripts’),
EntryPoint(name=’f2py3.9′, value=’numpy.f2py.f2py2e:main’, group=’console_scripts’)]

“`

入口点并不是 importlib.metadata 允许访问的唯一东西。可以调试、报告,或者(在极端情况下)触发兼容模式,你也可以在运行时检查依赖的版本!


f"{distribution.metadata['name']}=={distribution.version}"
[/code] [code]` ‘numpy==1.20.1’

“`

只接受位置参数

强制关键字的参数在传达 API 作者的意图方面取得巨大成功之后,另一个空白被填补了:只接受位置参数。

特别是对于那些允许使用任意关键字的函数(例如,生成数据结构),这意味着对允许的参数名称的限制更少:

“`
def some_func(prefix, /, **kwargs):
print(prefix, kwargs)

“`

“`
somefunc(“aprefix”, prefix=”prefix keyword value”)

“`


a_prefix {'prefix': 'prefix keyword value'}

“`

注意,令人困惑的是,变量 prefix 的值与 kwargs["prefix"] 的值不同。就像在很多地方一样,要注意小心使用这个功能。

自我调试表达式

50 多年来,print() 语句(及其在其他语言中的对应语句)一直是快速调试输出的最爱。

但是我们在打印语句方面取得了很大的进展,比如:

“`
specialnumber = 5
print(“special
number = %s” % special_number)

“`

“`
special_number = 5

“`

然而,自我记录的 f-strings 使它更容易明确:

“`
print(f”{special_number=}”)

“`


special_number=5

“`

在 f-string 插值部分的末尾添加一个 =,可以保留字面部分,同时添加数值。

当更复杂的表达式在该部分内时,这就更有用了:

“`
values = {}
print(f”{values.get(‘something’, ‘default’)=}”)

“`

“`
values.get(‘something’, ‘default’)=’default’

“`

欢迎来到 2019 年

Python 3.8 大约在两年前发布,它的一些新特性非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。


via: https://opensource.com/article/21/5/python-38-features

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

主题测试文章,只做测试使用。发布者:eason,转转请注明出处:https://aicodev.cn/2021/06/08/%e7%94%a8-python-3-8-%e4%b8%ad%e7%9a%84%e8%bf%99%e4%b8%aa%e4%bd%8d%e7%bd%ae%e6%8a%80%e5%b7%a7%e8%ae%a9%e4%bd%a0%e7%9a%84-api-%e5%8f%98%e5%be%97%e6%9b%b4%e5%a5%bd/

(0)
eason的头像eason
上一篇 2021年6月7日
下一篇 2021年6月8日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信