在最近发布的 Python 3.6 中使用新的 f 弦时,我注意到以下几点:
我们创建一个值为
bar
的foo
变量:>>> foo = 'bar'
然后,我们声明一个新变量,它是我们的 f 字符串,它应该使用
foo
进行格式化:>>> baz = f'Hanging on in {foo}'
好的,一切正常,然后我们调用
baz
来检查它的值:>>> baz 'Hanging on in bar'
让我们尝试更改
foo
的值并再次调用baz
:>>> foo = 'spam' >>> baz 'Hanging on in bar'
不应该是动态的吗?为什么会这样?我认为如果 foo
的值发生变化,f 字符串会更新,但这并没有发生。我不明白这是怎么回事。
最佳答案
f-string
在您执行时已经被求值:
>>> baz = f'Hanging on in {foo}'
具体来说,它查找名称 foo
的值并将其替换为 'bar'
,即为它找到的值。 baz
然后包含格式化后的字符串。
f-string
不是常量;这意味着,它们内部没有等待评估的替换字段after 被评估。 它们会在您执行它们时进行评估,之后,分配的值只是一个普通字符串:
>>> type(f'hanging on in {foo}')
<class 'str'>
有关引用,请参阅 the section on Formatted String Literals :
[..] While other string literals always have a constant value, formatted strings are really expressions evaluated at run time. [..]
执行表达式(查找替换字段及其后续格式)后,它们没有什么特别之处,表达式已被评估为字符串并分配给 baz
。
关于python - 为什么 f-strings 在它们引用的变量发生变化时不发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306928/