【问题标题】:Nested f-strings?嵌套的 f 弦?
【发布时间】:2021-04-28 16:15:55
【问题描述】:

所以我有一些复杂的东西,但这里有一个简单的版本:

i, j = 1, 2
a_1, a_2 = 1, 2
f"{a_f'{i}'} + {a_f'{j}'} = 3" == '1 + 2 = 3'

我想要一个像左边这样的表达式来给出一个像右边一样的结果,我在这里写的那个给出了一个错误。

这可以使用嵌套的 f 字符串来完成吗?

【问题讨论】:

  • 您能否简要说明其背后的原因?也许你的问题有更多的解决方案,只是不是通过 f-string。

标签: python python-3.x string-formatting f-string


【解决方案1】:

没有上下文,这似乎是XY problem。您可能应该使用字典或列表而不是变量,基于How do I create variable variables? 例如,

字典

>>> i, j = 1, 2
>>> a = {1: 1, 2: 2}
>>> f"{a[i]} + {a[j]} = 3"
'1 + 2 = 3'

列表

>>> i, j = 0, 1  # list indexing starts at 0
>>> a = [1, 2]
>>> f"{a[i]} + {a[j]} = 3"
'1 + 2 = 3'

【讨论】:

    【解决方案2】:

    您是否尝试通过创建字符串来动态获取变量? 如果是这样并且它不是类属性,那么我头顶上的唯一解决方案是使用全局变量或局部变量(如下所示),但不推荐:

    f'{globals()[f"a_{i}"]} + {globals()[f"a_{j}"]} = 3' == '1 + 2 = 3'
    

    更多信息请见How to get the value of a variable given its name in a string?

    【讨论】:

      【解决方案3】:

      不支持嵌套的 f 字符串。可以创建可变变量来实现相同的目的:

      i, j = 1, 2
      a_1, a_2 = 1, 2
      v1 = globals()[f"a_{i}"]
      v2 = globals()[f"a_{j}"]
      f"{v1} + {v2} = 3" == '1 + 2 = 3'
      

      另请参阅:How do I create variable variables?

      【讨论】:

        猜你喜欢
        • 2021-07-04
        • 2021-11-10
        • 2021-06-06
        • 2017-05-04
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多