只有第一个打印命令有效。我不明白为什么。我想根据传入的内容显示不同的前缀和后缀。
# We are going to have a word and a prefix or a suffix before or after
# that word
def joinWords(string, **sFox):
if sFox['prefix']:
return sFox['prefix'] + string
elif sFox['suffix']:
return string + sFox['suffix']
return string
#Why does this work?
#print(joinWords("Cookie", prefix="sugar"))
#And this does not?
#print(joinWords("Cookie", suffix="monster"))
Run Code Online (Sandbox Code Playgroud)
您遇到的问题是,kwargs不会包含未指定的键。当您尝试索引字典中不存在的键时,它会引发KeyError,
最直接的解决方案是在尝试访问密钥之前检查密钥是否存在:
if 'prefix' in sFox and sFox['prefix']:
Run Code Online (Sandbox Code Playgroud)
还有更好的 Pythonic 方法可以做到这一点。如前所述,dict.get()对于默认值来说,这是一个不错的选择:
if sFox.get('prefix'):
Run Code Online (Sandbox Code Playgroud)
这样,如果prefix'不在字典中,则该值将None计算为布尔值 false 并且完美地完成了任务。
当然,如果您确实不需要随机关键字参数,请尝试默认参数:
def joinWords(string, prefix=None, suffix=None):
if prefix:
return prefix + string
elif suffix:
return string + suffix
return string
Run Code Online (Sandbox Code Playgroud)
IMO 这可能是一个更好的解决方案,除非您想了解关键字参数包。
| 归档时间: |
|
| 查看次数: |
6732 次 |
| 最近记录: |