与 string.Template() 或其他方法相比,我喜欢使用 Python f-string,因为它的语法简单。然而,在我的应用程序中,字符串是从文件中加载的,变量的值只能稍后提供。
是否有办法调用与字符串定义分开的 fstring 功能?希望下面的代码能更好地解释我希望实现的目标。
a = 5
s1 = f'a is {a}' # prints 'a is 5'
a = 5
s2 = 'a is {a}'
func(s2) # what should be func equivalent to fstring
最佳答案
通过使用 eval()
并将 locals()
或任何任意字典作为第二个位置 locals
参数,您可以计算一个使用任意输入组合动态地动态 f 字符串。
def fstr(fstring_text, locals, globals=None):
"""
Dynamically evaluate the provided fstring_text
"""
locals = locals or {}
globals = globals or {}
ret_val = eval(f'f"{fstring_text}"', locals, globals)
return ret_val
示例用法:
format_str = "{i}*{i}={i*i}"
i = 2
fstr(format_str, locals()) # "2*2=4"
i = 4
fstr(format_str, locals()) # "4*4=16"
fstr(format_str, {"i": 12}) # "10*10=100"
关于Python fstring 作为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47597831/