如何从format()方法的字符串中获取变量名称

Mic*_*elR 3 python

可以说我有这条线:

"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()例如,为每个已解析的字段名称调用该方法,因此子类可以更加努力地找到要使用的正确对象.