考虑一个字符串 Python 中的 f-string

Consider a String a f-string in Python

假设我有

x = 3 
s = "f'12{x}4'"

如何将 s 视为 f 字符串来打印 1234,就像写 print(f'12{x}4') 当我打印 s 时,它打印为:f'12{x}4'

删除应该解决问题的双引号,因为 f 字符串中的 f 需要在实际字符串之外

你会这样做 -

x = 3
s = f'12{x}4'

这个也可以。

x = 3 
s = "12{}4"
print(s.format(x))

只需删除多余的逗号

s = f'12{x}4'

您缺少两个概念。

  1. 第一个,是告诉 python 您的字符串是 f 字符串的方式。这样做的方法是在第一个引号前添加字符 'f':
f"this will be a f-string"
  1. 无论您在 {} 之间有什么,它都将是一个先前定义的变量:
x = "something"
f"this will be {x}"

假设你问这个是因为你不能使用 actual f-strings,但也不想使用 format 显式传递参数,也许是因为你不知道哪个参数在 not-really-an-f-string 中,并且假设您不想使用 eval,因为 eval.

您可以将 localsglobals 范围内的变量传递给 format:

>>> x = 3
>>> s = '12{x}4'
>>> s.format(**globals())
'1234'
>>> s.format(**locals())
'1234'

取决于 s 的来源(也许是用户输入?)不过,这可能仍然有点冒险,最好定义一个 dict 的“允许”变量并在 format 中使用它。与 globalslocals 一样,任何未使用的变量都无关紧要。

>>> vars = {"x": x, "y": y, "z": z}
>>> s.format(**vars)

请注意,这并不能为您提供 f 字符串的全部功能,它也会 计算 表达式。例如,以上不适用于 s = '12{x*x}4'.

x = 3 
s = '12{}4'.format(x)

x = 3 
print('12%s4' %x)