在Python中,有没有一种方法可以在调用函数时将可选参数传递给函数,并且在函数定义中有一些基于“只有在传递可选参数时”的代码
发布于 2012-12-24 15:29:20
Python 2 documentation, 提供了两种方法来检测调用者是否提供了可选参数。
首先,您可以使用特殊的形参语法*。如果函数定义有一个前面有一个元组的形参,那么*会用前面的形参不匹配的任何位置参数填充该参数(作为一个元组)。如果函数定义有一个前面带有**的形参,那么Python会用前面的形参不匹配的任何关键字参数来填充该参数(作为字典)。该函数的实现可以检查这些参数的内容,以获得您想要的任何“可选参数”。
例如,这里有一个函数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。如果该参数具有此默认值,则表明调用方没有指定该参数。如果参数有非默认值,您就知道它来自调用方。
发布于 2012-12-24 14:43:07
def my_func(mandatory_arg, optional_arg=100):
print(mandatory_arg, optional_arg)http://docs.python.org/2/tutorial/controlflow.html#default-argument-values
我发现这比使用**kwargs更具可读性。
为了确定是否传递了参数,我使用一个自定义实用程序对象作为默认值:
MISSING = object()
def func(arg=MISSING):
if arg is MISSING:
...发布于 2015-06-30 21:08:00
def op(a=4,b=6):
add = a+b
print add
i)op() [o/p: will be (4+6)=10]
ii)op(99) [o/p: will be (99+6)=105]
iii)op(1,1) [o/p: will be (1+1)=2]
Note:
If none or one parameter is passed the default passed parameter will be considered for the function. https://stackoverflow.com/questions/14017996
复制相似问题