Я часто использую следующий шаблон для форматирования строк.
a = 3
b = 'foo'
c = dict(mykey='myval')
#prints a is 3, b is foo, mykey is myval
print('a is {a}, b is {b}, mykey is {c[mykey]}'.format(**vars()))
То есть у меня часто есть значения, которые мне нужно напечатать в локальном пространстве имен, представленном вызовом vars (). Однако, когда я просматриваю свой код, мне кажется, что это ужасно бессмысленно постоянно повторять шаблон .format(**vars())
.
Я хотел бы создать функцию, которая будет захватывать этот шаблон. Это было бы что-то вроде следующего.
# doesn't work
def lfmt(s):
"""
lfmt (local format) will format the string using variables
in the caller's local namespace.
"""
return s.format(**vars())
За исключением того, что к тому времени, когда я нахожусь в пространстве имен lfmt
, vars () уже не то, что я хочу.
Как я могу написать lfmt, чтобы он выполнял vars () в пространстве имен вызывающего, чтобы следующий код работал в качестве примера выше?
print(lfmt('a is {a}, b is {b}, mykey is {c[mykey]}'))