python - 是否可以像使用字符串和格式一样重用 f 字符串?
问题描述
我想创建一个可以多次使用的 f 字符串,如下代码format
:
TEXT_AMOUNT = 'text {amount}'
def f1(beginning):
return beginning + TEXT_AMOUNT.format(amount=10)
def f2(ending):
return TEXT_AMOUNT.format(amount=100) + ending
如何使用 f 字符串实现相同的功能?我试过:
TEXT_AMOUNT = f'text {amount}'
def f1(beginning):
amount = 100
return beginning + TEXT_AMOUNT
def f2(ending):
amount = 10
return TEXT_AMOUNT + ending
但是,我收到以下错误:
NameError: name 'amount' is not defined
解决方案
你不能。
f-string 不是一种字符串,它是一种字符串文字,它会立即被评估。您不能将 f 字符串存储在稍后评估的变量中,或者接受来自用户的变量等。1这是它们安全的唯一原因。
那么,如果您确实想多次使用一种格式(或从用户那里获取的格式等)怎么办?你用str.format
.
有时,您需要像 f-string 一样捕获所有局部变量和全局变量,但要明确地进行。因为这是一种罕见的情况(并且可能是一个安全漏洞),所以故意有点难看:
TEXT_AMOUNT = 'text {amount}'
def f1(beginning):
amount = 100
return beginning + TEXT_AMOUNT.format(**locals(), **globals())
这让你思考你在写什么——你真的不想globals
在这里,对吧?所以把它关掉。它还向读者发出信号——如果你正在拉入locals
,他们会希望看到字符串在你的源代码中确实是一个常量,没有做任何危险的事情。
1. 好吧,您可以在传递给的字符串中使用 f 字符串eval
……但这是一个糟糕的主意。
推荐阅读
- azure-data-factory-2 - Unpivot 转换错误:XX 列不是相同的 unpivot 数据类型(ADF 中的数据流)
- flutter - Flutter 上带有 CustomPaint 小部件的自定义形状可点击区域
- generics - 如何绑定结构的泛型类型,使其成为关联函数的具体类型?
- python - 在 QTextEdit 的光标位置添加新行
- django - 我可以在 Django 模板中获取特定对象的属性吗?
- azure - 用于节点的 Azure 函数应用程序和 runtimeStack
- powershell - 使用 PowerShell 远程安装时获取 MSI 退出代码
- python - 从 python 程序运行另一个 python 文件?
- python - 如何使用 WebRTC 在 Python 中将音频从麦克风流式传输到 Google Speech-to-Text
- javascript - 我的 discord.js 命令没有返回 json 文件中的所有内容