如何将 f-string 与变量一起使用,而不是与字符串文字一起使用?

新手上路,请多包涵

我想将 f-string 与我的字符串变量一起使用,而不是与用字符串文字 "..." 定义的字符串一起使用。

这是我的代码:

 name=["deep","mahesh","nirbhay"]
user_input = r"certi_{element}" # this string I ask from user

for element in name:
    print(f"{user_input}")

此代码给出输出:

 certi_{element}
certi_{element}
certi_{element}

但我想要:

 certi_{deep}
certi_{mahesh}
certi_{nirbhay}

我怎样才能做到这一点?

原文由 Deep Ghodasara 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 449
1 个回答

f"..." 将表达式结果插入 文字 时,字符串很棒,但是您没有文字,您在单独的变量中有一个模板字符串。

您可以使用 str.format() 将值应用于该模板:

 name=["deep","mahesh","nirbhay"]
user_input = "certi_{element}" # this string i ask from user

for value in name:
    print(user_input.format(element=value))

使用名称(例如 {element} )的字符串格式化占位符不是 _变量_。您为 str.format() 调用的关键字参数中的每个名称分配一个值。在上面的例子中, element=value 传入 value 变量的值,用 element 填充占位符。

f 字符串不同, {...} 占位符 不是 表达式,您不能在模板中使用任意 Python 表达式。这是一件好事,您不希望最终用户能够在您的程序中执行任意 Python 代码。有关详细信息,请参阅 格式字符串语法 文档

您可以传入任意数量的名称;字符串模板 不必 使用它们中的任何一个。如果将 str.format()**mapping 调用约定结合使用,则可以使用任何字典作为值的来源:

 template_values = {
    'name': 'Ford Prefect',
    'number': 42,
    'company': 'Sirius Cybernetics Corporation',
    'element': 'Improbability Drive',
}

print(user_input.format(**template_values)

以上将允许用户在他们的模板中使用 template_values 中的任何名称,任意次数。

虽然您可以使用 locals()globals() 生成将变量名称映射到值的字典,但我不推荐这种方法。使用像上面这样的专用命名空间来限制可用的名称,并为您的最终用户记录这些名称。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题