可以说我有这条线:
"My name is {name}".format(name="qwerty")
Run Code Online (Sandbox Code Playgroud)
我知道变量名是name,所以我可以填写它.但是,如果内部的词{}总是在变化,如下:
"My name is {name}"
"My name is {n}"
"My name is {myname}"
Run Code Online (Sandbox Code Playgroud)
我希望能够这样做:
"My name is {*}".format(*=get_value(*))
Run Code Online (Sandbox Code Playgroud)
哪里*是什么都词是内给定{}
希望我很清楚.
编辑:
def get_value(var):
return mydict.get(var)
def printme(str):
print str.format(var1=get_value(var1), var2=get_value(var2))
printme("my name is {name} {lastname}")
printme("your {gender} is a {sex}")
Run Code Online (Sandbox Code Playgroud)
有了这个,我不能硬编码printme函数内部的任何变量.
Mar*_*ers 12
您可以使用string.Formatter()类自己解析格式以列出所有引用:
from string import Formatter
names = [fn for _, fn, _, _ in Formatter().parse(yourstring) if fn is not None]
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from string import Formatter
>>> yourstring = "My name is {myname}"
>>> [fn for _, fn, _, _ in Formatter().parse(yourstring) if fn is not None]
['myname']
Run Code Online (Sandbox Code Playgroud)
你可以继承Formatter做一些更奇特的事情; Formatter.get_field()例如,为每个已解析的字段名称调用该方法,因此子类可以更加努力地找到要使用的正确对象.