【问题标题】:Combine python f-string with format将python f-string与格式结合起来
【发布时间】:2017-08-17 15:45:36
【问题描述】:

我想使用传递给format 方法的变量计算 f 字符串中的数学运算。例如我需要类似的东西:

print(f"{{a}} * 3".format(a=2))

此代码打印:

2 * 3

但我想要的结果是 6。我也不会使用 python eval 函数来评估这个字符串。

【问题讨论】:

    标签: python f-string


    【解决方案1】:

    PEP 498所述:

    str.format()“表达式解析器”不适合在实现 f 字符串时使用。

    虽然你可以这样做:

    name = "John"
    age = 30
    print(f'My name is {{0}} and I am 5 years older than {age - 5}'.format(name))
    

    您在原始问题中要求的内容不可行。

    您还可以阅读this Reddit thread 了解为什么这可能是个坏主意。

    【讨论】:

    • 啊,很高兴找到 PEP 498 摘录。我一直在寻找类似的东西来解释为什么你不能使用:print(f"{a * 3}".format(a=2))。 +1
    【解决方案2】:

    您还需要将3 放在花括号中:

    >>> a = 2
    >>> print(f"{a * 3}")
    6
    >>>
    

    【讨论】:

    • @AlirezaAfzalaghaei 虽然我承认没有尝试过每一种方式,但我很确定你不能。使用 f 字符串的全部目的是避免使用 str.format 方法。此外,您从未明确表示您必须使用str.format 方法。下次请在问题中说明您的所有要求。
    • @Alireza Afzal aghaei print(f"{a * 3}".format(a=2)) 确实有效,但 f 弦的用途是什么?
    • @whiteredblack 我是这么认为的,但事实并非如此。运行print(f"{a * 3}".format(a=2)) 引发NameError: name 'a' is not defined
    • 好的,实际上我无法创建任何变量。我还说在问题标题中使用格式:)
    • In [20]: a=2 In [21]: print(f"{a * 3}".format(a=3)) 你期望什么 9..对不起它的 6
    【解决方案3】:

    你可以试试这个。

    print((int(f"{{a}}".format(a=2)))*3)
    

    【讨论】:

    • 正如我所说,不会使用eval(或intfloat for ...)函数!
    • 哦,你刚才在问题中提到了 eval。
    • 其实你没说int或者float函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多