Python 2 documentation, 7.6. Function definitions提供了几种方法来检测调用者是否提供了可选参数。
首先,可以使用特殊的形参参数语法*。如果函数定义具有以单个*开头的形式参数,那么Python将使用不与先前形式参数(作为元组)匹配的任何位置参数填充该参数。如果函数定义具有以**开头的形式参数,那么Python将使用不与先前形式参数匹配的任何关键字参数填充该参数(如dict)。函数的实现可以检查这些参数的内容,以查找所需排序的任何“可选参数”。
例如,这里有一个函数opt_fun,它接受两个位置参数x1和x2,并寻找另一个名为“optional”的关键字参数。
>>> def opt_fun(x1, x2, *positional_parameters, **keyword_parameters):
... if ('optional' in keyword_parameters):
... print 'optional parameter found, it is ', keyword_parameters['optional']
... else:
... print 'no optional parameter, sorry'
...
>>> opt_fun(1, 2)
no optional parameter, sorry
>>> opt_fun(1,2, optional="yes")
optional parameter found, it is yes
>>> opt_fun(1,2, another="yes")
no optional parameter, sorry
第二,你可以提供默认参数值一些值,如None,调用者永远不会使用。如果参数具有此默认值,那么您知道调用方未指定该参数。如果参数有一个非默认值,你知道它来自调用者。