将字符串转换为 f 字符串

新手上路,请多包涵

如何将经典弦乐转换为 F 弦乐?

 variable = 42
user_input = "The answer is {variable}"
print(user_input)

输出: The answer is {variable}

 f_user_input = # Here the operation to go from a string to an f-string
print(f_user_input)

期望的输出: The answer is 42

原文由 François M. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 953
2 个回答

f 字符串是 syntax ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。

我假设你想使用 user_input 作为模板,所以只需在 user_input 对象上使用 str.format() 方法

 variable = 42
user_input = "The answer is {variable}"
formatted = user_input.format(variable=variable)

如果你想提供一个可配置的模板服务,创建一个包含所有可以插入的字段的命名空间字典,并使用 str.format()**kwargs 调用语法来应用命名空间:

 namespace = {'foo': 42, 'bar': 'spam, spam, spam, ham and eggs'}
formatted = user_input.format(**namespace)

然后,用户可以在 {...} 字段中使用命名空间中的任何键(或不使用,未使用的字段将被忽略)。

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

真正的答案可能是:不要这样做。通过将用户输入视为 f 字符串,您将其视为会产生安全风险的代码。你必须非常确定你可以信任输入的来源。

如果您知道用户输入是可信的,您可以使用 eval() 来做到这一点:

 variable = 42
user_input="The answer is {variable}"
eval("f'{}'".format(user_input))
'The answer is 42'

编辑添加:@wjandrea 指出了 另一个对此进行扩展的答案

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

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