我可以使用动态映射来解压 Python 中的关键字参数吗?

2024-05-16

长话短说,我想使用任意命名的参数调用 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(使用前将#替换为@)

我可以使用动态映射来解压 Python 中的关键字参数吗? 的相关文章

随机推荐