<< >>

diveintopython.org |

Python for experienced programmers

## 2.3. 可选和定名参数

Python允许函数参数拥有缺省值；如果函数不带参数调用，参数就得到它的缺省值。而且,参数可以通过使用指定参数名(译注：此后译作定名参数)以任何次序使用。在SQL Server Transact/SQL中的存储过程可以做到这点，如果你是一个SQL Server脚本的头头，你可以跳过这部分。

例 2.6. `help`, 一个有两个可选参数的函数

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

`spacing` 和 `collapse` 是可选的，因为它们拥有定义了的缺省值。`object` 是必须的，因为它没有缺省值。如果只使用一个参数来调用 `help`，`spacing` 缺省为 `10` 且 `collapse` 缺省为 `1`。如果用两个参数调用 `help`，`collapse` 仍然缺省为 `1`。

假定你想要给 `collapse` 指定一个值，但是想接受 `spacing` 的缺省值。在大多数语言中，可能很不幸，因为你将不得不使用三个参数来调用函数。但在Python中，参数可以通过名字以任意顺序被指定。

例 2.7. `help` 的合法调用

    help(odbchelper)
    help(odbchelper, 12)
    help(odbchelper, collapse=0)
    help(spacing=15, object=odbchelper)

| 只用一个参数，`spacing` 得到它的缺省值 `10` 且 `collapse` 得到它的缺省值 `1`。
| 使用两个参数，`collapse` 得到它的缺省值`1`。
| 这里你明确指明了 `collapse` 参数，且给定了它的值。`spacing` 仍然得到它的缺省值 `10`。
| 甚至必须的参数(象 `object`，它没有缺省值)可以被定名，并且定名参数可以以任意顺序显示。

这些看上去非常累，除非你意识到参数不过是一个字典。“通常”的不使用参数名字的函数调用方式只是一个简写，Python按照函数声明中所指定的顺序来将参数值与参数名匹配起来。并且大多数情况，你会按“通常”的方式来调用函数，但是如果你需要总是可以有额外的灵活性。

要调用一个函数唯一要做的就是必须为每个必须的参数指定一个值(多多少少)；以何种方式和顺序来指定就是你的事了。

进一步阅读 |

- Python Tutorial 讨论了确切的 缺省值在何时并且如何进行计算，它关系到当缺省值为列表或一个带有边际效应的表达式。

« 使用 from module import导入模块 | type，str，dir，和其它内键函数 »