当前位置:首页>python>Python 中的Keyword-Only 参数

Python 中的Keyword-Only 参数

  • 2026-09-02 19:13:32
Python 中的Keyword-Only 参数
关注+星标,每天学习Python新技能

来源:网络

“Keyword-Only 参数”是 3.0 版中添加的 Python 功能,   功能是只要启用了“Keyword-Only ”参数的声明:只能由关键字提供且永远不会由位置参数自动填充的参数, 它在 PEP 3102 中有描述,可读性很强,但我认为该功能可以从更多示例和基本原理中获益。

要理解Keyword-Only关键字参数,我们首先必须消除对 Python 位置参数和关键字参数的常见误解, 考虑以下功能:

defprint_greeting(name, use_colors=False):# ...

我们通常将其视为具有一个位置参数和一个关键字参数,并期望调用代码将像这样使用它:

print_greeting("Mary")print_greeting("Mary", use_colors=True)print_greeting("Mary", use_colors=False)  # 冗余但明确

事实上,你也可以像下面这样调用这个函数(尽管看到这些形式通常会感到惊讶):

print_greeting("Mary", True)print_greeting(name="Mary")print_greeting(use_colors=True, name="Mary")

换句话说,两个参数都可以按位置或按名称传递, 从技术上讲,你应该将位置参数或关键字参数视为由函数调用而不是函数定义。

name 和 use_colors 之间的正确区别是 use_colors 有一个默认参数值,而 name 没有。

弄清楚这一点后,我们现在可以在脑海中区分两个不同的问题:

  • 当人们调用我们的函数时,我们应该鼓励或期望或强制他们使用关键字参数,还是位置参数?

  • 我们对每个参数都有一个好的默认值吗?

使用 Python 的Keyword-only关键字参数,我们可以独立地处理这两个问题。

为了使 use_colors 无法按位置传递,我们可以这样定义它:

defprint_greeting(name, *, use_colors=False):# ...

这带来了一些优点:

  • 它使调用代码更明确(但也更冗长), 将不再可能看到如下代码:

print_greeting("Mary", True)

......乍一看看会想知道“那个布尔参数是什么意思?”

  • 它允许我们作为函数作者添加更多关键字参数,以我们想要的任何顺序定义,而不会破坏使用我们函数,因为他们是按位置而不是按名称传递参数。

一旦我们有了这些Keyword-only限关键字的参数,我们还可以问“我们真的有好的默认值吗?” 假设我们意识到颜色代码的使用非常重要,并且每次使用 print_greeting 函数时都必须传递——我们没有一个好的默认值, 我们可以这样写我们的函数:

defprint_greeting(name, *, use_colors):pass

然后调用:

print_greeting("Mary", use_colors=True)

如果调用者未能传递 use_colors,他们会看到此错误消息:

TypeError: print_greeting() missing1requiredkeyword-onlyargument: 'use_colors'

目前还没有看到那么多Keyword-only关键字参数的使用,但这个特性非常重要,大家可以更多的使用这个特性使自己的代码更加健壮。

原文:https://lukeplant.me.uk/blog/posts/keyword-only-arguments-in-python/

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

推荐阅读

Python+PostgreSQL数据库交互详解:从基础连接到高级ORM

一文带你了解三大开源关系型数据库:SQLite、MySQL和PostgreSQL

Python 50 个基础函数大揭秘,你掌握了几个?

如何在Python展平列表?

点击 阅读原文 了解更多

最新文章

随机文章