Python 的字符串格式化: f-string 可以通过变量赋值的方法使用么?

本人有一堆 HTML 格式的文件需要多语言替换其中的一些字符串。

本来是这样写的:

title = '中文标题'
name = '中文名称'

html_format = F"""<html>xxxxxxxx {title} xxxxxxx,xxxxx{name}xxxxxx 很长很长的字符串…"""

写了几个发现,这样写实在是太麻烦了啊,代码完全写死在一个文件里面,没法吧模板字符串分离出来。 大家有没有什么方法可以实现类似这样的写法?:

html = """<html>xxxx.xxxx{xxx}{xx}""" ## 把字符串单独存到一个变量里面

Fhtml ##html 是变量.F 是 f_string 方法

PS:虽然知道有模板引擎 Jinja2,但是不喜欢它在渲染的时候传参太墨迹了啊。


Python 的字符串格式化: f-string 可以通过变量赋值的方法使用么?

12 回复

有一个比较诡异的方法:

<br>name = '邪恶的 EVAL'<br>my_str = "F'这个变量名字是:{name}'"<br><br>print(eval(my_str2))<br><br>&gt;&gt;&gt; 这个变量名字是:邪恶的 EVAL<br><br>

使用的时候,把 HTML 模板文档编辑好后,头部加上 str = “”“F”"",尾部加上"""""",然后通过 import 引入这个变量就可以了。


可以的,f-string 可以通过变量赋值的方法来使用。核心技巧是:先定义一个包含花括号 {} 占位符的字符串模板,然后在运行时使用 str.format() 方法或 eval() 函数(需谨慎)将变量值填充进去。但这并不是“原生”的 f-string 在定义时直接嵌入变量名的方式。

更常见的做法是使用 str.format() 或模板字符串(string.Template)。不过,如果你确实想用类似 f-string 的语法,可以这样做:

# 方法1:使用 str.format() —— 最推荐,清晰安全
name = "World"
template = "Hello, {}!"
result = template.format(name)
print(result)  # 输出: Hello, World!

# 方法2:使用字典传递多个变量
template = "Hello, {name}! You are {age} years old."
data = {"name": "Alice", "age": 30}
result = template.format(**data)
print(result)  # 输出: Hello, Alice! You are 30 years old.

# 方法3:使用 string.Template(适用于用户提供的模板,更安全)
from string import Template
template = Template("Hello, $name!")
result = template.substitute(name="Bob")
print(result)  # 输出: Hello, Bob!

# 方法4:使用 eval() 动态执行 f-string(有安全风险,不推荐在生产环境使用)
# 仅用于演示:确保你完全信任模板内容的来源
name = "Charlie"
template = 'f"Hello, {name}!"'
result = eval(template)
print(result)  # 输出: Hello, Charlie!

简单总结:用 str.format()string.Template 来动态赋值。

用 eval 把文本拼凑成 f_string

print(html.format(**locals()))

感谢,可以用了

我擦,大神啊,学到了学到了。
有句话送给你:效率恐怖,代码风骚!!!

现在流行前后端分离了。后端只传递 json。

正常的学习路径是先知道字符串的.format 然后再知道 f 表达式。你怎么是反过来的。知道 f 表达式却不知道 format

说的是,因为是新手,所以看的都是最新的文档,之前的方法还不是很了解

我本身是设计师啊,但是翻译的工作也在我这边,所以只是做简单工具,不是在服务器上用的

老老实实.format 吧,个人不太喜欢 f-string,语法上既不是带括号的函数又不是空一格的命令也不是带点儿的方法,感觉很怪

回到顶部