探索只接受位置参数和其他两个未被充分利用但仍然有用的 Python 特性。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、虚拟空间、营销软件、网站建设、于洪网站维护、网站推广。
这是 Python 3.x 首发特性系列文章的第九篇。Python 3.8 于 2019 年首次发布,两年后,它的许多很酷的新特性仍然没有被使用。下面是其中的三个。
入口点 在 Python 包中被用来做各种事情。大多数人熟悉的是 console_scripts 入口点,不过 Python 中的许多插件系统都使用它们。
在 Python 3.8 之前,从 Python 中读取入口点的最好方法是使用 pkg_resources
,这是一个有点笨重的模块,它是 setuptools
的一部分。
新的 importlib.metadata
是一个内置模块,它允许访问同样的东西:
from importlib import metadata as importlib_metadata
distribution = importlib_metadata.distribution("numpy")
distribution.entry_points
[EntryPoint(name='f2py', value='numpy.f2py.f2py2e:main', group='console_scripts'),
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)
some_func("a_prefix", prefix="prefix keyword value")
a_prefix {'prefix': 'prefix keyword value'}`
注意,令人困惑的是,变量 prefix
的值与 kwargs["prefix"]
的值不同。就像在很多地方一样,要注意小心使用这个功能。
50 多年来,print()
语句(及其在其他语言中的对应语句)一直是快速调试输出的最爱。
但是我们在打印语句方面取得了很大的进展,比如:
special_number = 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'
Python 3.8 大约在两年前发布,它的一些新特性非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。
本文名称:用Python3.8中的这个位置技巧让你的API变得更好
网站链接:http://www.mswzjz.cn/qtweb/news32/262582.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能