在python中修改str.format函数

Modify str.format function in python

str.format 几乎完全符合我的要求。 我想添加到 format() 的功能是使用可选关键字,为此我必须使用另一个特殊字符(我猜)。

所以 str.format 可以做到这一点:

f = "{ID1}_{ID_optional}_{ID2}"
f.format(**{"ID1" : " ojj", "ID2" : "makimaki", "ID_optional" : ""})
# Result: ' ojj__makimaki' #

我真的不能使用可选 ID。如果字典不包含 "ID_optional",它会产生 KeyError。我觉得标记可选ID应该是这样的:

f = "{ID1}_[IDoptional]_{ID2}"

另一件事:我有很多模板字符串要处理,它们使用 [] 而不是 {}。所以最好的方法是将特殊字符添加为格式函数的参数。

所以最基本的问题是有修改原始函数的复杂方法吗?或者我应该根据str.format编写自己的格式函数 正则表达式?

你if/else根据dic是否有key格式化:

f = "{ID1}_{ID_optional}_{ID2}" if "ID_optional" in d else "{ID1}_{ID2}" 

字典查找是 0(1) 所以只检查

很便宜

一种选择是定义您自己的 Formater。您可以继承标准的并覆盖 get_field 到 return 一些适合您的用例的合理默认值。有关更多文档,请参阅 link。