探索仅接受位置参数和其他两个未充分使用但仍然有用的Python功能。这是Python3.x新特性系列的第9篇文章。Python3.8于2019年首次发布,两年后,它的许多很酷的新特性仍然没有被使用。以下是其中的三个。importlib.metadata入口点在Python包中用于执行各种操作。大多数人都熟悉console_scripts入口点,尽管Python中的许多插件系统都使用它们。在Python3.8之前,从Python读取入口点的最佳方法是使用pkg_resources,这是一个有点笨拙的模块,是setuptools的一部分。新的importlib.metadata是一个内置模块,允许访问相同的东西:fromimportlibimportmetadataasimportlib_metadatadistribution=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作者中传达了强制关键字参数在intents取得巨大成功后,另一个空白被填补:只接受位置参数。特别是对于允许任意关键字的函数(例如生成数据结构),这意味着对允许的参数名称的限制更少:defsome_func(prefix,/,**kwargs):print(prefix,kwargs)some_func("a_prefix",prefix="prefixkeywordvalue")a_prefix{'prefix':'prefixkeywordvalue'}`请注意,令人困惑的是,变量prefix的值与kwargs["prefix"]不同。与许多地方一样,请谨慎使用此功能。自调试表达式50多年来,print()语句(及其在其他语言中的对应语句)一直是快速调试输出的最爱。但是我们已经通过类似这样的打印语句取得了长足的进步:special_number=5print("special_number=%s"%special_number)special_number=5然而,自文档化的f字符串使显式变得更容易:print(f"{special_number=}")special_number=5`在f字符串插值部分末尾添加一个=,可以保留文字部分,同时添加值。这在部分内部有更复杂的表达式时更有用:values={}print(f"{values.get('something','default')=}")values.get('something','default')='default'欢迎来到2019年Python3.8大约在两年前发布,它的一些新功能确实很酷而且未被充分利用。如果您还没有将它们添加到您的工具箱中。
