3

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

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

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

4

1 回答 1

7

它不能。 这个问题描述了一种使用装饰器包装函数并将传递的参数设置为它的属性的方法。spam但是,如果没有外界的帮助,就无法从内部找出答案。**kwargs您必须使用接受并使用它来存储信息的函数来拦截调用。

但是,您应该谨慎执行此操作。传入参数的不同方式应该是相同的。如果你做了一些让它们以不同方式工作的事情,你会让许多试图使用你的功能的人感到困惑。

于 2012-09-11T20:36:55.903 回答