当涉及到默认值时,在Python中使用**kwargs的正确方法是什么?
Kwargs返回一个字典,但是设置默认值的最佳方法是什么?我应该把它作为字典来访问吗?使用get函数?
class ExampleClass:
def __init__(self, **kwargs):
self.val = kwargs['val']
self.val2 = kwargs.get('val2')
一个简单的问题,但我找不到好的资料。在我所见过的代码中,人们用不同的方式来实现它,很难知道该用什么。
使用**kwargs和默认值很容易。然而,有时候你一开始就不应该使用**kwarg。
在这种情况下,我们并没有充分利用**狼。
class ExampleClass( object ):
def __init__(self, **kwargs):
self.val = kwargs.get('val',"default1")
self.val2 = kwargs.get('val2',"default2")
上面是一个“为什么要麻烦?”的声明。这和
class ExampleClass( object ):
def __init__(self, val="default1", val2="default2"):
self.val = val
self.val2 = val2
当您使用**kwargs时,意味着关键字不仅是可选的,而且是有条件的。有比简单的默认值更复杂的规则。
当您使用**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" )
使用**kwargs和默认值很容易。然而,有时候你一开始就不应该使用**kwarg。
在这种情况下,我们并没有充分利用**狼。
class ExampleClass( object ):
def __init__(self, **kwargs):
self.val = kwargs.get('val',"default1")
self.val2 = kwargs.get('val2',"default2")
上面是一个“为什么要麻烦?”的声明。这和
class ExampleClass( object ):
def __init__(self, val="default1", val2="default2"):
self.val = val
self.val2 = val2
当您使用**kwargs时,意味着关键字不仅是可选的,而且是有条件的。有比简单的默认值更复杂的规则。
当您使用**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" )
对于不在字典中的键,可以传递一个默认值给get():
self.val2 = kwargs.get('val2',"default value")
但是,如果您计划使用具有特定默认值的特定参数,为什么不首先使用命名参数呢?
def __init__(self, val2="default value", **kwargs):