我想用unpack kwargs格式化方法打印一个字符串。但是对于性别输入,需要使用一个字典进行映射。我能找到的唯一方法是创建一个字典并使用不同的密钥。但它似乎不是一个好方法。不过吗?
def func(**kwargs):
_m = {'h': 'he', 's': 'she'}
print('This is {name}. {gender} is a {position}'.format(gender=_m[kwargs['sex']], **kwargs))
#correct
func(name='Jon', sex='h', position='Engineer')
#correct
func(name='Jon', sex='s', position='Engineer')
#incorrect
func(name='Jon', gender='s', position='Engineer')
答案 0 :(得分:1)
首先,如果您在上一个示例中使用了代码,那么您将获得sex
,因为您没有传递一个_m
参数,而该参数是您尝试从内部kwargs
检索的。 1}} dict。
使用您想要的任何本地数据更新gender
dict并仅使用def func(**kwargs):
_m = {'h': 'he', 's': 'she'}
kwargs["gender"] = _m[kwargs["gender"]]
print('This is {name}. {gender} is a {position}'.format(**kwargs))
属性,例如:
def func(**kwargs):
replacements = {"gender": {"h": "he", "s": "she"}}
for field in replacements:
kwargs[field] = replacements[field].get(kwargs.get(field, None), None)
print('This is {name}. {gender} is a {position}'.format(**kwargs))
您还可以通过创建dict映射来更新多个字段:
replacements
然后,您可以根据传递的参数,使用尽可能多的字段填充replacements
dict。
如果未传递默认值,您甚至可以声明默认值,例如,如果replacements = {"gender": {"h": "he", "s": "she", None: "it"}}
dict设置为:
gender
使用缺少func(name='Robot', position='Engineer')
# This is Robot. it is a Engineer
属性的调用将导致:
{{1}}