如何找出哪些参数是默认的?

  • 本文关键字:默认 参数 何找出 python
  • 更新时间 :
  • 英文 :


我有一个函数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')