【问题标题】:Consider a String a f-string in Python将字符串视为 Python 中的 f 字符串
【发布时间】:2021-11-15 23:47:15
【问题描述】:

假设我有

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

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

【问题讨论】:

  • 也许是print(eval(s))
  • 不清楚你在问什么。 f 字符串使用s=f'12{3}4' 格式。它没有用引号括起来。考虑阅读关于他们的tutorial
  • F 字符串是 Python 语言的一个特性。它们之所以起作用,是因为解释器(或编译器,或其他运行时)理解 Python 源代码并知道如何解释该语法。您可以将此字符串视为 python 源代码,并使用eval(s) 对其进行评估,但这样做会非常可疑。你到底为什么想要这个?你想达到什么目的?
  • 看起来像 XY 问题...字符串 s 来自哪里?
  • 它会这样打印,因为你有双引号,只需删除它们,s 将包含 1234

标签: python f-string


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您缺少两个概念。

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

    【讨论】:

      【解决方案3】:

      假设你问这个是因为你不能使用 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 并在@987654330 中使用它@。与globalslocals 一样,任何未使用的变量都无关紧要。

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

      请注意,这并没有为您提供 f-strings 的全部功能,不过,f-strings 也会评估表达式。例如,上述方法不适用于s = '12{x*x}4'

      【讨论】:

      • 这就是我的意思,是的,非常感谢它有效!
      【解决方案4】:

      你会这样做 -

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

      【讨论】:

        【解决方案5】:

        这也可以。

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

        【讨论】:

          【解决方案6】:

          去掉多余的逗号

          s = f'12{x}4'
          

          【讨论】:

            【解决方案7】:
            x = 3 
            s = '12{}4'.format(x)
            

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

            【讨论】:

            • 这不是问题的答案...
            猜你喜欢
            • 2017-11-29
            • 2018-04-30
            • 2016-01-27
            • 1970-01-01
            • 1970-01-01
            • 2018-02-08
            • 2020-02-28
            • 2020-05-02
            相关资源
            最近更新 更多