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

kjo*_*kjo 3 python introspection

假设一个函数spam有签名spam(ham=None).下面的三个调用都会导致局部变量hamspam名字空间中有值None:

spam()
spam(None)
spam(ham=None)
Run Code Online (Sandbox Code Playgroud)

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

Bre*_*arn 7

它不能. 这个问题描述了一种使用装饰器来包装函数并将传递的参数设置为属性的方法.但没有办法在spam没有外界帮助的情况下从内部发现.您必须**kwargs使用接受并使用它来存储信息的函数来拦截调用.

但是,你应该谨慎这样做.传递参数的不同方式应该是相同的.如果你做了一些让他们以不同方式工作的事情,那么你会混淆许多试图使用你的功能的人.