Этот материал встроен в python:
var1 = "testentry1"
print("this is the text to change {var1}".format(**locals()))
Обратите внимание, что для переноса контекста обычно лучше использовать словарь, а не голые переменные.
Если ваши строки статичны (то есть вы используете их в контексте, где все переменные известны заранее), вы можете просто добавить строку с f
(python 3.6 +):
var1 = "testentry1"
print(f"this is the text to change {var1}")
Если вы действительно хотите заново изобретать колеса, вы можете сделать то же самое с re:
def my_format(s, vars):
return re.sub(r'{(\w+)}', lambda m: vars[m.group(1)], s)
print(my_format("this is the text to change {var1}", locals()))
«Автоматическая» замена вне контекста (нелокальные) переменные также возможна, но очень хакерским способом:
# do NOT do that!
import re
import sys
var1 = "testentry1"
def my_format2(s):
return re.sub(r'{(\w+)}', lambda m: eval(m.group(1)), s)
def get_var(name):
f = sys._getframe()
while f:
if name in f.f_locals:
return f.f_locals[name]
f = f.f_back
def my_format3(s):
return re.sub(r'{(\w+)}', lambda m: get_var(m.group(1)), s)
print(my_format2("this is the text to change {var1}"))
print(my_format3("this is the text to change {var1}"))
В ответ на ваше обновление легко использовать format
с классом dict:
class TestClass:
def __init__(self):
self.var1 = "testentry1"
self.var2 = "testentry2"
def convert_text(self, original_text):
return original_text.format(**vars(self))
TC = TestClass()
print(TC.convert_text("this is the text to change {var1}"))
print(TC.convert_text("this is the text to change {var2}"))