ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 4.2. 使用可选参数和命名参数 Python 允许函数参数有缺省值;如果调用函数时不使用参数,参数将获得它的缺省值。此外,通过使用命名参数还可以以任意顺序指定参数。SQL Server Transact/SQL 中的存储过程也可以做到这些;如果你是脚本高手,你可以略过这部分。 `info` 函数就是这样一个例子,它有两个可选参数。 ``` def info(object, spacing=10, collapse=1): ``` `spacing` 和 `collapse` 是可选参数,因为它们已经定义了缺省值。`object` 是必备参数,因为它没有指定缺省值。如果调用 `info` 时只指定一个参数,那么 `spacing` 缺省为 `10` ,`collapse` 缺省为 `1`。如果调用 `info` 时指定两个参数,`collapse` 依然默认为 `1`。 假如你要指定 `collapse` 的值,但是又想要接受 `spacing` 的缺省值。在绝大部分语言中,你可能运气就不太好了,因为你需要使用三个参数来调用函数,这势必要重新指定 `spacing` 的值。但是在 Python 中,参数可以通过名称以任意顺序指定。 ## 例 4.4. `info` 的有效调用 ``` info(odbchelper) info(odbchelper, 12) info(odbchelper, collapse=0) info(spacing=15, object=odbchelper) ``` | | | | --- | --- | | \[1\] | 只使用一个参数,`spacing` 使用缺省值 `10` ,`collapse` 使用缺省值 `1`。 | | \[2\] | 使用两个参数,`collapse` 使用缺省值 `1`。 | | \[3\] | 这里你显式命名了 `collapse` 并指定了它的值。`spacing` 将依然使用它的缺省值 `10`。 | | \[4\] | 甚至必备参数 (例如 `object`,没有指定缺省值) 也可以采用命名参数的方式,而且命名参数可以以任意顺序出现。 | 这些看上去非常累,除非你意识到参数不过是一个字典。“通常” 不使用参数名称的函数调用只是一个简写的形式,Python 按照函数声明中定义的的参数顺序将参数值和参数名称匹配起来。大部分时间,你会使用“通常”方式调用函数,但是如果你需要,总是可以提供附加的灵活性。 > 注意 > 调用函数时唯一必须做的事情就是为每一个必备参数指定值 (以某种方式);以何种具体的方式和顺序都取决于你。 ## 进一步阅读 * _Python Tutorial_ 确切地讨论了[何时、如何进行缺省参数赋值](http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000),这都和缺省值是一个 list 还是一个具有副作用的表达式有关。