Python函数如何确定是否(以及如何)显式传递了kwarg默认值?

时间:2012-09-11 20:30:06

标签: python introspection

假设函数spam具有签名spam(ham=None)。以下三个调用都会导致ham命名空间中的局部变量spam具有值None

spam()
spam(None)
spam(ham=None)

spam如何找出实际使用这三种替代方案中的哪一种?

1 个答案:

答案 0 :(得分:7)

它不能。 This question描述了一种使用装饰器来包装函数并将传递的参数设置为属性的方法。但没有办法在没有外界帮助的情况下从spam内找到答案。您必须使用接受**kwargs的函数拦截调用,并使用该函数存储信息。

但是,你应该谨慎这样做。传递参数的不同方式是假设工作相同。如果你做了一些让他们以不同方式工作的事情,你会让许多试图使用你的功能的人感到困惑。