我有一个函数func(a=1, b=2, c=3)
。如果所有参数都保留为默认值,并且任意两个给定参数都是用户指定的,则会发生不同的情况,即使用户恰好指定了默认值。如:
- 用户输入
func()
-> - 用户输入
func(a=42, c=191)
-> - 用户输入
func(a=1, c=3)
->事情2也会发生(即使用户指定的值恰好是默认值)。
为了决定是否继续的1或2,我不能只是比较默认参数值。我需要找出哪些参数是用户指定的,而不考虑它们的值。
(我也考虑过使默认值无意义,如NaN或Inf,然后通过将它们与NaN或Inf进行比较来检查哪些值是用户指定的,然后在需要时将它们定义为a=1, b=2, c=3
。)这不起作用,因为numpy没有导入,也不需要导入,所以我无法访问NaN或Inf。但也许我错过了什么?
那么:有没有一种方法可以找出哪些参数是用户指定的和/或哪些参数是默认的,而不管它们的实际值?
(我也考虑过使默认值无意义,如NaN或Inf,然后检查哪些值是用户指定的…
这就是典型的处理方式。在简单的情况下,您将使用None
作为前哨值:
def func(a=None, b=None, c=None):
if a is None:
print('using default value')
a = 1
else:
print('user specified a value')
但是如果None
是一个有效值,您可以使用其他对象。为例子:
NOT_SET_BY_CALLER = object()
def func(a=NOT_SET_BY_CALLER, b=NOT_SET_BY_CALLER, c=NOT_SET_BY_CALLER):
if a is NOT_SET_BY_CALLER:
print('using default value')
a = 1
else:
print('user specified a value')