评估变量包含 f 字符串中的数学表达式

Evaluating variable contain mathematical expression in f-strings

我必须像 10**5 一样接受输入(使用 raw_input())作为幂表达式,然后打印它的值。我尝试了一些代码,但这些代码没有给出预期的结果:

print(f'{2**4}') #<-- prints 16 correctly
a = '{2**4}'
print(f'{{}}'.format(a)) #<-- prints {2**4}

是否可以实现类似的东西:

var = '2**4'
print(f'{<some way to expand var in here>}') #<-- prints 16

所以这适用于所有表达式(例如 ((2+4-10+88*2)/100)**5)但我不确定这是否是正确的方法(因为不推荐 eval

a = '2**4'
print(eval (a))  #<-- prints 16

在 f-strings 中,表达式的解析等同于:

ast.parse('(' + expression + ')', '<fstring>', 'eval')

https://docs.python.org/3/library/ast.html#ast.parse

但变量将被替换为它们的实际值。您正在寻找的是一种 f 字符串不支持的嵌套评估。相反,作为一种安全的方法,您可以先使用 '**' 拆分,然后转换为 int,最后使用 power:

In [9]: s = "2**4"

In [10]: print(f"{pow(*map(int, s.split('**')))}")
16