def f(**kwargs):
foo = kwargs.pop(‘foo’,None)
bar = kwargs.pop(‘bar’,None)
…etc…
等同于
def f(*, foo=None, bar=None, **kwargs):
…etc…
使用**kwargs,关键字不仅是可选的,而且是有条件的。有比简单默认值更复杂的规则。
class ExampleClass( object ):
def init(self, **kwargs):
self.val = “default1”
self.val2 = “default2”
if “val” in kwargs:
self.val = kwargs[“val”]
self.val2 = 2*self.val
elif “val2” in kwargs:
self.val2 = kwargs[“val2”]
self.val = self.val2 / 2
else:
raise TypeError( “must provide val= or val2= parameter values” )