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):

spacingcollapse 是可选的,因为它们拥有定义了的缺省值。object 是必须的,因为它没有缺省值。如果只使用一个参数来调用 helpspacing 缺省为 10collapse 缺省为 1。如果用两个参数调用 helpcollapse 仍然缺省为 1

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

例 2.7. help 的合法调用

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

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

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

进一步阅读