如何将经典string
转换为f-string
? :
variable = 42
user_input = "The answer is {variable}"
print(user_input)
答案是{variable}
f_user_input = # Here the operation to go from a string to an f-string
print(f_user_input)
答案是42
答案 0 :(得分:9)
f-string是语法,而不是对象类型。您无法将任意字符串转换为该语法,语法会创建一个字符串对象,而不是相反。
我假设您要使用user_input
作为模板,因此只需使用user_input
对象上的str.format()
method:
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)
然后,用户可以使用{...}
字段中命名空间中的任何键(或者不使用,忽略未使用的字段)。
答案 1 :(得分:4)
真正的答案可能是:不要这样做。通过将用户输入视为f字符串,您将其视为具有安全风险的代码。您必须确定自己可以信任输入的来源。
如果您知道可以信任用户输入,则可以使用eval():
variable = 42
user_input="The answer is {variable}"
eval("f'{}'".format(user_input))
'The answer is 42'
编辑后添加:@wjandrea指出another answer,对此进行了扩展。
答案 2 :(得分:1)
variable = 42
user_input = "The answer is {variable}"
# in order to get The answer is 42, we can follow this method
print (user_input.format(variable=variable))
(或)
user_input_formatted = user_input.format(variable=variable)
print (user_input_formatted)
答案 3 :(得分:0)
只是添加一种类似的方法来做同样的事情。
variable = 42
user_input = "The answer is {variable}"
print(eval(f"f'{user_input}'"))
答案 4 :(得分:0)
您可以使用 f-string 代替普通字符串。
variable = 42
user_input = f"The answer is {variable}"
print(user_input)