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

时间:2014-04-03 07:05:40

标签: python

让我说我有这条线:

"My name is {name}".format(name="qwerty")

我知道变量名是name,所以我可以填写它。 但是,如果{}中的单词总是发生变化,如下所示:

"My name is {name}"
"My name is {n}"
"My name is {myname}"

我希望能够做到这一点:

"My name is {*}".format(*=get_value(*))

*{}

中提供的是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}")

希望我很清楚。


修改

printme

有了这个,我无法对{{1}}函数中的任何变量进行硬编码。

5 个答案:

答案 0 :(得分:11)

您可以使用string.Formatter() class自行解析格式以列出所有引用:

from string import Formatter

names = [fn for _, fn, _, _ in Formatter().parse(yourstring) if fn is not None]

演示:

>>> from string import Formatter
>>> yourstring = "My name is {myname}"
>>> [fn for _, fn, _, _ in Formatter().parse(yourstring) if fn is not None]
['myname']

你可以继承Formatter做一些更奇特的事情;例如,为每个已解析的字段名称调用Formatter.get_field()方法,因此子类可以更加努力地找到要使用的正确对象。

答案 1 :(得分:1)

如果您的数据在字典中(根据您编辑过的问题),那么您可以使用字典作为格式参数。

data = {'first_name': 'Monty',
        'last_name': 'Python'}

print('Hello {first_name}'.format(**data))
print('Hello {last_name}'.format(**data))

答案 2 :(得分:0)

或者另一种方法是使用函数:

def format_string(name):
    return "My name is {name}".format(name="qwerty")

然后叫它:

format_string("whatever")

答案 3 :(得分:0)

def get_arg(yourstring):
    arg_list = []
    pin = False
    for ch in yourstring:
        if ch == "{":
            pin = True
        elif ch == "}":
            pin = False
            arg_list.append(text)
            text = ""
        elif pin:
            text +=ch
    return arg_list

答案 4 :(得分:-1)

您可以使用变量代替name="querty"

name1="This is my name";

>>"My name is {name}".format(name=name1)

输出:

'My name is abc'

另一个例子,

a=["A","B","C","D","E"]
>>> for i in a:
...     print "My name is {name}".format(name=i)

输出:

My name is A
My name is B
My name is C
My name is D
My name is E