我需要这样的东西:'{abc} {def}'.format(lambda key: compute_value(key))
。看起来我需要为此实现一个自定义映射:
class Vars(collections.abc.Mapping):
def __getitem__(self, key):
return 'abc'
def __len__(self):
pass
def __iter__(self):
pass
现在,如果我尝试'{abc} {def}'.format(**Vars())
,我会得到TypeError: iter() returned non-iterator of type 'NoneType'
错误。出于某种原因,它试图遍历我的映射。
有没有一种简单的方法可以使用计算键值映射来格式化字符串?
我认为您可以使用str.format_map()
,这样每个项目都可以根据需要提取,而不是通过**
扩展到kwargs
'{abc} {def}'.format_map(Vars())
结果:
'abc abc'
注:Python 3.2+仅