让我说我有这条线:
"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}}函数中的任何变量进行硬编码。
答案 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