我有一个AI例程,可以将各种数据存储为Memory对象。 Memory对象根据传递给构造函数的“内存类型”而具有不同的参数(回想起来,每种类型的内存确实应该是Memory的子类,但目前并不重要)。

我需要为__str__() -s设置Memory方法。用另一种语言,我可能会做这样的事情:

if self.memtype == "Price":
    return self.good+" is worth "+self.price+" at "+self.location
elif self.memtype == "Wormhole":
    return self.fromsys+" has a wormhole to "+self.tosys
...


但是,使用Pythonic(且快速)进行这种操作的方法是使用字典。但问题是,这些字符串在返回之前需要插入值。我想可以用lambdas做到这一点,但这让我感到有些不雅和过于复杂。有没有更好的方法(str.format()突然出现……)?

最佳答案

是的,使用str.format()

formats = {
    'Price': '{0.good} is worth {0.price} at {0.location}',
    'Wormhole': '{0.fromsys} has a wormhole to {0.tosys}',
}

return formats[self.memtype].format(self)


通过传入self作为第一个位置参数,可以在self格式占位符中寻址{...}上的任何属性。

您也可以将更详细的格式应用于这些值(例如浮点精度,填充,对齐等),请参见formatting syntax

演示:

>>> class Demo():
...     good = 'Spice'
...     price = 10
...     location = 'Betazed'
...     fromsys = 'Arrakis'
...     tosys = 'Endor'
...
>>> formats = {
...     'Price': '{0.good} is worth {0.price} at {0.location}',
...     'Wormhole': '{0.fromsys} has a wormhole to {0.tosys}',
... }
>>> formats['Price'].format(Demo())
'Spice is worth 10 at Betazed'
>>> formats['Wormhole'].format(Demo())
'Arrakis has a wormhole to Endor'

关于python - 存储在dict中时评估产生字符串的语句“以后”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21078816/

10-14 04:30