【问题标题】:String formatting with quotation marks带引号的字符串格式
【发布时间】:2020-05-11 05:21:57
【问题描述】:

假设我有一个清单

list = ['a', 'b', 'c']

我想创建以下字符串:

foo_a = bar['a']
foo_b = bar['b']
foo_c = bar['c']

我尝试了以下方法:

for i in list:
    print("foo_{} = bar['{{}}']".format(i))

但是输出是

foo_a = bar['{}']
foo_b = bar['{}']
foo_c = bar['{}']

我已阅读Why is this usage of python F-string interpolation wrapping with quotes?,但第二种方法似乎不再有效。

【问题讨论】:

  • 您能否展示一下理想的前景是什么样的?
  • @Greg 请参阅第二个 sn-p,foo_a = bar['a'] ...。我猜 OP 正在做代码生成。

标签: python string-formatting


【解决方案1】:

您有两个 {} 占位符,但只有一个变量。因此,您需要让这些占位符知道他们需要使用相同的占位符。此外,由于某种原因,您在第二个占位符中使用了双括号。这用于“转义”大括号,因此 {{}} 将变为 {}(而不是实际的占位符)。

所以在解决了这两个问题之后:

>>> list = ['a', 'b', 'c']
>>> for i in list:
        print("foo_{i} = bar['{i}']".format(i=i))
     #  print("foo_{0} = bar['{0}']".format(i))

foo_a = bar['a']
foo_b = bar['b']
foo_c = bar['c']

或者使用f-strings(对于Python >= 3.6):

for i in list:
    print(f"foo_{i} = bar['{i}']")

为了更好地了解占位符的使用,请阅读 PyFormat 的更多信息,特别是 Basic Formatting 部分了解有关位置占位符的信息,以及 Named place-holders 部分了解命名占位符。

【讨论】:

  • 大括号也被转义了,即'{{}}'.format() -> '{}'
  • 啊,我明白了,非常感谢!您介意解释一下为什么将 0 放在 {} 中吗?
  • 谢谢@wjandrea 我在答案中添加了一些关于此的cmets
  • @BenBernke 我添加了一个链接,其中包含更多示例以及有关如何准确使用占位符的说明
【解决方案2】:

试试这个。你错过了一些东西。

list = ['a', 'b', 'c']
for i in list:
    print("foo_{} = bar[\'{}\']".format(i, i))

【讨论】:

  • 单引号在双引号字符串中时无需转义。
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多