如何从字符串中获取format()方法的变量名
假设我有这一行代码:
"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
函数里面硬编码任何变量。
6 个回答
-1
或者你可以用一个函数来替代:
def format_string(name):
return "My name is {name}".format(name="qwerty")
然后调用这个函数:
format_string("whatever")
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
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
3
Python 3.8 版本增加了一个很棒的功能,叫做 f-strings,来解决这个问题:
my_var = 123
print(f"{my_var = }")
这个代码会输出
my_var = 123
41
你可以使用 string.Formatter()
类 自己解析这个格式,来列出所有的引用:
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()
方法会被调用来处理每一个解析出来的字段名,这样子类就可以更努力地找到合适的对象来使用。