假设函数spam
具有签名spam(ham=None)
。以下三个调用都会导致ham
命名空间中的局部变量spam
具有值None
:
spam()
spam(None)
spam(ham=None)
spam
如何找出实际使用这三种替代方案中的哪一种?
答案 0 :(得分:7)
它不能。 This question描述了一种使用装饰器来包装函数并将传递的参数设置为属性的方法。但没有办法在没有外界帮助的情况下从spam
内找到答案。您必须使用接受**kwargs
的函数拦截调用,并使用该函数存储信息。
但是,你应该谨慎这样做。传递参数的不同方式是假设工作相同。如果你做了一些让他们以不同方式工作的事情,你会让许多试图使用你的功能的人感到困惑。