长话短说,我想使用任意命名的参数调用 format,这将执行查找。
'{Thing1} and {other_thing}'.format(**my_mapping)
我尝试像这样实现 my_mapping:
class Mapping(object):
def __getitem__(self, key):
return 'Proxied: %s' % key
my_mapping = Mapping()
调用时按预期工作my_mapping['anything']
。但是当如上所示传递给 format() 时,我得到:
TypeError: format() argument after ** must be a mapping, not Mapping
我尝试过子类化dict
代替object
,但现在打电话format()
如图所示KeyError
。我什至实施了__contains__
as return True
,但仍然KeyError
.
所以看来**
不只是打电话__getitem__
在传入的对象上。有谁知道如何解决这个问题?
在 Python 2 中你可以使用string.Formatter
class.
>>> class Mapping(object):
... def __getitem__(self, key):
... return 'Proxied: %s' % key
...
>>> my_mapping = Mapping()
>>> from string import Formatter
>>> Formatter().vformat('{Thing1} and {other_thing}', (), my_mapping)
'Proxied: Thing1 and Proxied: other_thing'
>>>
vformat
需要 3 个参数:格式字符串、位置字段序列和关键字字段映射。由于不需要位置字段,我使用了一个空元组()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)