作者:nup1764819 | 来源:互联网 | 2022-12-07 10:23
你不能两次传递相同的参数,并且variable=True, **kwargs
当kwargs
包含一个键时完全相同variable
; 在这种情况下,你有效地进行了呼叫self.func(variable=True, variable=False)
,这显然是错误的.假设您不能variable
作为单独的参数接收,例如:
def __init__(self, variable=True, **kwargs):
self.func(variable, **kwargs)
那么另一种方法是在kwargs
dict
自身中设置默认值:
def __init__(self, **kwargs):
kwargs.setdefault('variable', True) # Sets variable to True only if not passed by caller
self.func(**kwargs)
在Python 3.5中,通过PEP 448的其他拆包概括,您可以安全地将其排成一行:
def __init__(self, **kwargs):
self.func(**{'variable': True, **kwargs})
因为重复键在创建新键时是合法的dict
(只保留最后一次出现的键),因此您可以创建dict
具有唯一映射的全新键,然后立即将其解压缩.
1> ShadowRanger..:
你不能两次传递相同的参数,并且variable=True, **kwargs
当kwargs
包含一个键时完全相同variable
; 在这种情况下,你有效地进行了呼叫self.func(variable=True, variable=False)
,这显然是错误的.假设您不能variable
作为单独的参数接收,例如:
def __init__(self, variable=True, **kwargs):
self.func(variable, **kwargs)
那么另一种方法是在kwargs
dict
自身中设置默认值:
def __init__(self, **kwargs):
kwargs.setdefault('variable', True) # Sets variable to True only if not passed by caller
self.func(**kwargs)
在Python 3.5中,通过PEP 448的其他拆包概括,您可以安全地将其排成一行:
def __init__(self, **kwargs):
self.func(**{'variable': True, **kwargs})
因为重复键在创建新键时是合法的dict
(只保留最后一次出现的键),因此您可以创建dict
具有唯一映射的全新键,然后立即将其解压缩.