4.2. 使用可选参数和命名参数

Python 允许函数参数具有默认值;如果调用函数时未提供参数,则该参数将使用其默认值。此外,可以通过使用命名参数以任意顺序指定参数。SQL Server Transact/SQL 中的存储过程也可以这样做,因此如果您是 SQL Server 脚本专家,则可以跳过此部分。

以下是 info 的示例,这是一个具有两个可选参数的函数


def info(object, spacing=10, collapse=1):

spacingcollapse 是可选的,因为它们定义了默认值。object 是必需的,因为它没有默认值。如果仅使用一个参数调用 info,则 spacing 默认为 10collapse 默认为 1。如果使用两个参数调用 info,则 collapse 仍默认为 1

假设您要为 collapse 指定一个值,但要接受 spacing 的默认值。在大多数语言中,您将无计可施,因为您需要使用三个参数调用该函数。但是在 Python 中,可以按名称以任意顺序指定参数。

示例 4.4. info 的有效调用

info(odbchelper)                    1
info(odbchelper, 12)                2
info(odbchelper, collapse=0)        3
info(spacing=15, object=odbchelper) 4
1 只有一个参数时,spacing 使用其默认值 10collapse 使用其默认值 1
2 有两个参数时,collapse 使用其默认值 1
3 在这里,您显式命名 collapse 参数并指定其值。spacing 仍使用其默认值 10
4 即使是必需的参数(例如没有默认值的 object)也可以命名,并且命名参数可以按任意顺序出现。

这看起来很奇怪,直到您意识到参数只是一个字典。不带参数名称的“普通”函数调用方法实际上只是一种简写,其中 Python 将值与其在函数声明中指定的顺序的参数名称进行匹配。大多数情况下,您将以“普通”方式调用函数,但如果需要,您始终可以灵活地使用其他方式。

Note
调用函数唯一需要做的是为每个必需的参数指定一个值(以某种方式);您执行此操作的方式和顺序由您决定。

可选参数的进一步阅读