我想定義我自己的str.format()規範,例如我可以定義自己的格式規範嗎?
def earmuffs(x):
return "*"+str(x)+"*"
使用,例如,像這樣:
def triple2str(triple, fmt="g"):
return "[{first:{fmt}} & {second:+{fmt}} | {third}]".format(
first=triple[0], second=triple[1], third=triple[2], fmt=fmt)
使:
## this works:
>>> triple2str((1,-2,3))
'[1 & -2 | 3]'
>>> triple2str((10000,200000,"z"),fmt=",d")
'[10,000 & +200,000 | z]'
## this does NOT work (I get `ValueError: Invalid conversion specification`)
>>> triple2str(("a","b","z"),fmt=earmuffs)
'[*a* & *b* | z]'
我能想出迄今最好的是
def triple2str(triple, fmt=str):
return "[{first} & {second} | {third}]".format(
first=fmt(triple[0]), second=fmt(triple[1]), third=triple[2])
其工作原理是這樣的:
>>> triple2str((1,-2,3))
'[1 & -2 | 3]'
>>> triple2str((10000,200000,"z"),fmt="{:,d}".format)
'[10,000 & 200,000 | z]' # no `+` before `2`!
>>> triple2str((10000,200000,"z"),fmt=earmuffs)
'[*10000* & *200000* | z]'
這真的是我能做的最好的嗎? 我不滿意的是不清楚如何合併修飾符(例如,上面的+
)。
是str.format
是否可擴展?
使用python 3,你可以使用'f-string'來調用字符串中的函數。所以'f'方法{fn('a')}''變成''方法* a *「' – GiantsLoveDeathMetal